2012-04-10 16 views
0

私はソケットプログラミングを学び、私の基本的な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" 

OUTPUT

Connecting 
Sending Request 
298 
Receving Reponse 
Completed 

私はそれが私のウィキペディアのホームページのHTMLコンテンツを表示する期待していたものの: '(

また、それは素晴らしいことですもし誰かが私がPython Sockeについて詳しく読むことができるいくつかのWebリソース/ブックを共有することができればHTTPリクエストのクライアントのためのTプログラミング

ありがとう!

+2

は( ' '\ rを\ n'')あなたの改行を適切な改行はありますか?また、ヘッダーの後に空の行が1つあるはずです。これはヘッダーが完了したことをサーバーに伝えます。 –

+0

ありません、それは感謝:) – codersofthedark

答えて

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 

EDIT:リソース/書籍のAS /ご参照をence - リファレンスHTTPクライアントの実装では、Python独自のhttplib.pyを見てください。 :)

+2

はおそらく、不足しているが、「\ rを\ n」は、元のコードで問題となっている..私は\を考えたのn ..私はそれを得た十分しかし、それはdoesntのもの波平。 Wikipedia Webサーバーは、無効/壊れたHTTPヘッダーが表示されるとすぐに接続を閉じます。 – modelnine

+0

@ modelnine:あなたは正しいと思います。 :) – codersofthedark

+0

@AKX:ありがとう..。私は\ nだけ使っていました。そして、参考としてhttplib.py素晴らしい音! :) – codersofthedark

関連する問題