2

次のコードは何も出力しません (なぜですか?)。

#!/usr/bin/python           
import socket             

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)                 

s.connect(("www.python.org" , 80))
print s.recv(4096)
s.close()

ブラウザにアクセスしたときに表示されるように、Python Web サイトのソース コードを出力するには、何を変更する必要がありますview sourceか?

4

3 に答える 3

12

HTTPリクエスト/レスポンス プロトコルです。リクエストを送信していないため、応答がありません。

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)                 

s.connect(("www.python.org" , 80))
s.sendall("GET /\r\n") # you're missing this line
print s.recv(4096)
s.close()

もちろん、これは HTTP エラーや HTTP リダイレクトなどを処理することなく、最も生の HTTP/1.0 要求を実行します。ソケット プログラミングと HTTP に慣れるための演習として実行する以上の実際の使用にはお勧めしません。

HTTP の場合、Python はいくつかの組み込みモジュールを提供します: httplib (ビット下位レベル)、urllibおよびurllib2 (上位レベル)。

于 2012-05-15T12:03:16.137 に答える
3

リクエストで完全なURLを使用しない限り、リダイレクト(302)を取得します。

代わりにこれを試してください:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)                 
s.connect(("www.python.org" , 80))
s.sendall("GET http://www.python.org HTTP/1.0\n\n")
print s.recv(4096)
s.close()

もちろん、URLのコンテンツだけが必要な場合は、これははるかに簡単です。:)

print urllib2.urlopen('http://www.python.org').read()
于 2012-05-15T12:21:25.293 に答える