python (2.7.6) 소켓을 사용하여 웹 사이트에서 텍스트 파일을 요청하려는 코드가 있습니다.
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
h='58.68.237.xxx'
p=80
s.connect((h,p))
m='GET / HTTP/1.1\r\n\r\n'
s.sendall(m)
r=s.recv(4096)
print r
그리고 출력을 얻었습니다.
HTTP/1.1 400 Bad Request\r\n
Date: Mon, 13 Oct 2014 02:46:15 GMT\r\n
Server: Apache/2.2.3 (CentOS)\r\n
Content-Length: 300\r\nConnection: close\r\n
Content-Type: text/html; charset=iso-8859-1\r\n
\r\n
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 //EN">\n
<html><head>\n
<title>400 Bad Request</title>\n
</head><body>\n
<h1>Bad Request</h1>\n
<p>Your browser sent a request that this server could not understand.<br/>\n
</p>\n<hr>\n
<address>Apache/2.2.3 (CentOS) Server at 127.0.0.1 Port 80</address>\n
</body></html>\n
질문 : 내 코드에 어떤 문제가 있습니까? 좋은 요청을 위해 어떻게 해결할 수 있습니까?
HTTP 1.1에서는 Host
모든 요청과 함께 헤더 를 전송 해야합니다. 에서 RFC 1626 섹션 14.23 :
클라이언트는 모든 HTTP / 1.1 요청 메시지에 Host 헤더 필드를 포함해야합니다. [...] 모든 인터넷 기반 HTTP / 1.1 서버는 호스트 헤더 필드가없는 모든 HTTP / 1.1 요청 메시지에 400 (잘못된 요청) 상태 코드로 응답해야합니다.
Host
헤더 의 이유는 여러 웹 사이트가 동일한 IP 주소에서 제공되는 경우 서버가 액세스중인 웹 사이트를 명확히하기위한 것입니다.
또는 HTTP 1.1 대신 HTTP 1.0을 사용할 수 있습니다. HTTP 1.0에는 Host
헤더 가 필요하지 않으므로 연결하려는 서버에 단일 웹 사이트 만있는 경우 작동 할 수 있지만 여러 웹 사이트를 호스팅하는 경우 여전히 400 오류가 발생합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다