2012-04-10 14 views
6

私はPythonで基本的なHTTP要求と応答を実行し、Webページに非常に基本的な出力を表示する、非常にシンプルなWebサーバー型のアプリケーションを実装する必要があります。私は実際にPythonでそれをコーディングすることについてあまり心配していませんが、どこから始めたらよいかわかりません。これを設定するには? 1つのファイルですか?複数のファイル?私は、これが "サーバー"であるという事実にどのようにアプローチするのか分かりません - HTTPリクエスト/ソケット/リクエストの処理などに対処する方法はよく分かりません。リソース?ライブラリを使用せずにPythonを使用して単純なWebサーバーを実装するにはどうすればよいですか?

+0

要件をさらに説明します(理由も説明します)。完全なアプリケーションレベルのスタックを実装したいのですか?たとえば、アプリケーションレベルのスタックを実装できますか? Apache?あなたが必要とするものをもっと説明してください*そしてなぜ。*最後に、あなたが "websocket"タグを持っているとき、それを意味するのか、それとも間違ったタグを使うのでしょうか? –

+2

* *ライブラリを使用しないでください?確かに 'ソケット'は最低限必要になるでしょうか? – geoffspear

+0

[こちらのドキュメント](http://docs.python.org/library/simplehttpserver.html)ページをチェックしてください。ここでは、「任意のライブラリ」はPythonのインストールに含まれていないライブラリです。 –

答えて

2

この目的でsocket programmingを使用できます。次のスニペットは、TCPソケットを作成し、HTTP要求をポート9000でリッスン:

from socket import * 

def createServer(): 
    serversocket = socket(AF_INET, SOCK_STREAM) 
    serversocket.bind(('localhost',9000)) 
    serversocket.listen(5) 
    while(1): 
     (clientsocket, address) = serversocket.accept() 
     clientsocket.send("HTTP/1.1 200 OK\n" 
     +"Content-Type: text/html\n" 
     +"\n" # Important! 
     +"<html><body>Hello World</body></html>\n") 
     clientsocket.shutdown(SHUT_WR) 
     clientsocket.close() 

    serversocket.close() 

createServer() 
は、サーバ、 $ python server.pyを起動

。 ウェブブラウザ(クライアントとして機能する)にhttp://localhost:9000/を開きます。ブラウザウィンドウで、「Hello World」というテキスト(HTTPレスポンス)を確認できます。

EDIT ** 前のコードだけChromeでテストされました、そしてあなたたちは他のブラウザについては示唆されているように、コードは次のように変更されました:あなたは、プレーンに送信することができます応答のhttp-似を作成するには

  1. httpバージョン1.1、ステータスコード200 OK、コンテンツタイプtext/htmlのヘッダ。
  2. クライアントソケットは、TCPソケットのように応答が送信されると閉じられる必要があります。
  3. が正しくクライアントソケットを閉じるには、shutdown()コードは、ChromeでFirefoxの(http://localhost:9000/)と、端末での簡単なカールを(http://localhost:9000カール)テストした後

socket.shutdown vs socket.closeを呼び出す必要があります。

+2

-1。これを試しましたか?これはまったく機能しません。それはソケットサーバーですが、HTTPを話さないのです。 – Ashe

+3

実際にHTTPを話すわけではないので、ほとんどのブラウザはこれで動作しません。 Chromeでは動作しません。停止ボタンを押すとFirefoxでのみ機能します。これはWebサーバーではありません。 – Ashe

+0

私はあなたのスクリプトをコピーしました、そして、私はこれを修正するにはどうすればいいですか? – Simon

8

SimpleHttpServer(py3:http.server)モジュールをご覧ください。

何をしようとしているのかに応じて、モジュールのソース(py2py3)を使ってアイデアをチェックするだけです。

低レベルをもっと使いたいのであれば、SimpleHttpServerはBaseHttpServersource)まで拡張して動作させるだけです。

あなたもより低レベル、SocketServerを見てみましょう(ソース:py2py3)を取得したい場合。

人々は多くの場合、ディレクトリを共有したい場合は、python -m SimpleHttpServer(またはpython3 -m http.server)のようなpythonを実行します。完全に機能し単純なサーバーです。

+0

私はおそらくHTTPのドキュメントを最初にチェックするべきだと言います。 RFCのように。 – zinking

関連する問題