2012-04-10 48 views
0

我正在學習socket編程,並試圖設計一個我的基本http客戶端。但不知何故一切順利,但我沒有收到任何數據。你能告訴我我錯過了什麼嗎?套接字不接收數據。爲什麼?

CODE

import socket 

def create_socket(): 
    return socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

def remove_socket(sock): 
    sock.close() 
    del sock 


sock = create_socket() 
print "Connecting" 
sock.connect(('en.wikipedia.org', 80)) 
print "Sending Request" 
print sock.sendall ('''GET /wiki/List_of_HTTP_header_fields HTTP/1.1 
Host: en.wikipedia.org 
Connection: close 
User-Agent: Web-sniffer/1.0.37 (+http://web-sniffer.net/) 
Accept-Encoding: gzip 
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7 
Cache-Control: no-cache 
Accept-Language: de,en;q=0.7,en-us;q=0.3 
Referer: d_r_G_o_s 
''') 
print "Receving Reponse" 
while True: 
    content = sock.recv(1024) 
    if content: 
     print content 
    else: 
     break 
print "Completed" 

輸出

Connecting 
Sending Request 
298 
Receving Reponse 
Completed 

雖然我期待它給我看維基百科的網頁的HTML內容:「(

而且,這將是巨大的如果有人可以分享一些網絡資源/書籍,我可以詳細閱讀有關Python socke的內容t編程爲HTTP請求客戶端

謝謝!

+2

你的換行符是否正確換行(''\ r \ n'')?另外,在標題之後你應該有一個空行,這告訴服務器標題已經完成。 – 2012-04-10 07:10:18

+0

不,它不是..我認爲\ n應該足夠,但它不..我知道了..謝謝:) – codersofthedark 2012-04-10 07:57:18

回答

2

對於一個最小的HTTP客戶端,你絕對不應該發送Accept-Encoding: gzip - 服務器很可能會回覆一個gzip壓縮的響應,你將無法通過眼睛獲得多少意義。 :)

你沒有發送最後的雙重\r\n(你是不是真的用\r\n作爲規範終止你的行(除非你碰巧在Windows上用Windows行結束符開發,但這只是運氣而不是編程。SE)

此外,del sock有沒有做什麼你認爲它

反正 - 這工作:

import socket 
sock = socket.socket() 
sock.connect(('en.wikipedia.org', 80)) 
for line in (
    "GET /wiki/List_of_HTTP_header_fields HTTP/1.1", 
    "Host: en.wikipedia.org", 
    "Connection: close", 
): 
    sock.send(line + "\r\n") 
sock.send("\r\n") 

while True: 
    content = sock.recv(1024) 
    if content: 
     print content 
    else: 
     break 

編輯:由於資源/書籍/參考ence - 對於參考HTTP客戶端實現,請看Python自己的httplib.py。 :)

+2

最有可能的是,缺少「\ r \ n」是原代碼中的問題;維基百科Web服務器一旦發現無效/損壞的HTTP標頭,就立即關閉連接。 – modelnine 2012-04-10 07:33:12

+0

@modelnine:我認爲你是對的.. :) – codersofthedark 2012-04-10 07:59:04

+0

@AKX:謝謝..。我只用\ n。而httplib.py作爲參考聽起來很棒! :) – codersofthedark 2012-04-10 08:00:19