2017-09-16 2 views
0

저는 파이썬을 사용하여 HTTP 프로토콜을 통해 소켓에 연결하고 URL을 검색하는 방법을 배우고 있습니다. 누군가 내가 잘못했을지도 모른다는 것을 지적 할 수 있습니까?소켓에 연결하는 중 오류가 발생했습니다.

파이썬 코드 :

# Networking 
## Connect to a Socket 
import socket 
mysock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
mysock.connect(('data.pr4e.org', 80)) # Host, Port Number 

cmd = 'GET http://data.pr4e.org/intro-short.txt HTTP/1.0\r\n\r\n'.encode() 
mysock.send(cmd) 

while TRUE: 
    data = mysock.recv(512) 
    if (len(data)<1): 
     break 
    print(data.decode()) 
mysock.close() 

나는 윈도우 10 명령 프롬프트에서 프로그램을 실행

C:\Users\Kane\Desktop>python networking.py 

나는 다음과 같은 오류 메시지가 얻을 :

Traceback (most recent call last): 
    File "networking.py", line 7, in <module> 
    mysock.connect(('data.pr4.org', 80)) # Host, Port Number 
    File "C:\Users\Kane\Anaconda2\lib\socket.py", line 228, in meth 
    return getattr(self._sock,name)(*args) 
socket.gaierror: [Errno 11001] getaddrinfo failed 

감사합니다.

+0

은 "data.pr4.org"유효한 서버인가? – coder

+0

실제 오류를 알 수 있으면 어떤 유형의 예외인지 파이썬에게 묻습니다. 인쇄 유형 (예외)을 사용하는 try & catch 문 –

+2

DNS에서 해결할 수없는 호스트 이름을 사용하는 것 외에도 HTTP 요청은 유효한 HTTP 요청이 아닙니다 HTTP/1.0이 엄격하게 요구하지는 않지만 대부분의 경우 오늘날 필요로하는 Host 헤더를 잃어 버리기 때문입니다. 이 작업을 수행하는 상위 레벨 라이브러리 대신 HTTP 프로토콜을 직접 사용하려면 프로토콜을 추측하지 말고 표준을 연구하거나 제대로 구현 된 클라이언트가 수행 한 기존 HTTP 트래픽을 조사하십시오. –

답변

0

@ t.m.adam이 옳았다는 것이 밝혀졌습니다.

코드는 TRUE가 True 여야한다는 점을 제외하고는 잘 작동합니다.

이전에 호스트 또는 서버 문제 일 수있었습니다. 나는 다른 사람들이 아래와 같은 출력을 얻을 수 있다면 질문을 삭제할 것이다.

C:\Users\Kane\Desktop>python networking.py 
HTTP/1.1 200 OK 
Date: Sun, 17 Sep 2017 00:12:07 GMT 
Server: Apache/2.4.7 (Ubuntu) 
Last-Modified: Sat, 13 May 2017 11:22:22 GMT 
ETag: "1d3-54f6609240717" 
Accept-Ranges: bytes 
Content-Length: 467 
Cache-Control: max-age=0, no-cache, no-store, must-revalidate 
Pragma: no-cache 
Expires: Wed, 11 Jan 1984 05:00:00 GMT 
Connection: close 
Content-Type: text/plain 
관련 문제