2017-09-16 70 views
0

我正在學習如何使用python通過HTTP協議連接套接字並檢索URL。有人可以協助指出我可能出錯的地方嗎?嘗試連接到套接字時出錯

Python代碼:

# 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() 

我在Windows上運行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

能夠知道真正的錯誤請問Python是什麼類型的異常:通過帶打印類型的try&catch語句(異常) –

+2

除了使用無法通過DNS解析的主機名之外,HTTP請求不是有效的HTTP請求因爲它包含了URL而不僅僅是路徑,並且在大多數情況下也會丟失現在需要的主機頭,儘管HTTP/1.0並不嚴格要求它。如果你真的想要直接使用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 
相關問題