0

8000を使用してポート上にPythonサーバーを作成しましたpython -m SimpleHTTPServer

WebブラウザからこのURLにアクセスすると、以下のコンテンツが表示されます。

ここに画像の説明を入力してください

ここで、Pythonを使用して上記のコンテンツを取得したいと思います。だから、そのために私がしたことは

>>> import socket
>>> s = socket.socket(
...     socket.AF_INET, socket.SOCK_STREAM)
>>> s.connect(("localhost", 8000))
>>> s.recv(1024)

しかし、s.recv(1024)何も起こらなかった後は、そこで待って何も印刷しません。

だから、私の質問は、Pythonを使用して上記のディレクトリコンテンツ出力を取得する方法です。また、誰かが私にチュートリアルを提案できますかsocket programming with python。公式チュートリアルはあまり好きではありませんでした。

また、Pythonを使用してコンテンツを受信しようとすると、奇妙なことがわかりました。そのときはlocalhost:8000Webブラウザーからアクセスできませんが、Pythonプログラムを強制終了するとすぐにアクセスできます。

4

2 に答える 2

4

おそらく、Python で http 経由でコンテンツを取得する最も簡単な方法は、urllib2 モジュールを使用することです。例えば:

from urllib2 import urlopen
f = urlopen('http://localhost:8000')
for line in f:
    print line

これにより、SimpleHTTPServer によってホストされているファイルが出力されます。

于 2012-07-04T15:49:18.697 に答える
3

しかし、 s.recv(1024) の後は何も起こらず、そこで待機して何も出力しません。

ソケットを開いてデータを待つだけですが、それは HTTP プロトコルの仕組みではありません。応答を受け取りたい場合は、最初に要求を送信する必要があります (基本的に、一覧表示するディレクトリまたはダウンロードするファイルをサーバーに伝える必要があります)。本当に必要な場合は、生のソケットを使用してリクエストを送信してスキルをトレーニングすることもできますが、適切なライブラリを使用することを強くお勧めします (Matthew Adams の応答とurllib2例を参照してください)。

また、python を使用してコンテンツを受信しようとすると、何も起こらないことがわかりました。Web ブラウザーから localhost:8000 にアクセスできませんが、python プログラムを強制終了するとすぐにアクセスできます。

これは、SimpleHTTServer がシングルスレッドであり、同時に複数の接続をサポートしていないためです。修正したい場合は、こちらの回答をご覧ください: BasicHTTPServer, SimpleHTTPServer and concurrency .

于 2012-07-04T16:47:43.240 に答える