可能な限り短いと思うので、コード全体を貼り付けています。
import socket
def recv_all(sock):
parts = []
while True:
msg = ""
msg = sock.recv(4096)
print "recieved", len(msg), "bytes."
if not msg:
break
parts.append(msg)
return "".join(parts)
http_request = """GET / HTTP/1.1
Host: {}
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; U; tr) Presto/2.10.229 Version/11.64
Accept: text/html, application/xml;q=0.9, application/xhtml xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: en
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers
"""
site = "www.google.com.tr"
print "creating connection"
conn = socket.create_connection((site,80))
print "sending data"
conn.sendall(http_request.format(site))
print "recieving response"
response = recv_all(conn)
print "closing connection"
conn.close()
print response
これを実行すると、次の出力が得られます。
接続の作成 データの送信 応答の受信 3743 バイトを受信しました。 4096 バイトを受信しました。 4096 バイトを受信しました。 4096 バイトを受信しました。 3472 バイトを受信しました。 1648 バイトを受信しました。
私が期待していたのは、最後のチャンク (この場合は 1648) を読み取った後に 0 バイトを読み取ることです。しかし、それは代わりに待ち続けます。
私はPython 2.7でWindows 7を使用しています。
ここで何が間違っていますか?意図したとおりに動作させるにはどうすればよいですか?