私はPythonで基本的なHTTP要求と応答を実行し、Webページに非常に基本的な出力を表示する、非常にシンプルなWebサーバー型のアプリケーションを実装する必要があります。私は実際にPythonでそれをコーディングすることについてあまり心配していませんが、どこから始めたらよいかわかりません。これを設定するには? 1つのファイルですか?複数のファイル?私は、これが "サーバー"であるという事実にどのようにアプローチするのか分かりません - HTTPリクエスト/ソケット/リクエストの処理などに対処する方法はよく分かりません。リソース?ライブラリを使用せずにPythonを使用して単純なWebサーバーを実装するにはどうすればよいですか?
答えて
この目的で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-似を作成するには
- httpバージョン1.1、ステータスコード200 OK、コンテンツタイプtext/htmlのヘッダ。
- クライアントソケットは、TCPソケットのように応答が送信されると閉じられる必要があります。
- が正しくクライアントソケットを閉じるには、
shutdown()
コードは、ChromeでFirefoxの(http://localhost:9000/)と、端末での簡単なカールを(http://localhost:9000カール)テストした後
socket.shutdown vs socket.closeを呼び出す必要があります。
SimpleHttpServer(py3:http.server)モジュールをご覧ください。
何をしようとしているのかに応じて、モジュールのソース(py2、py3)を使ってアイデアをチェックするだけです。
低レベルをもっと使いたいのであれば、SimpleHttpServerはBaseHttpServer(source)まで拡張して動作させるだけです。
あなたもより低レベル、SocketServerを見てみましょう(ソース:py2、py3)を取得したい場合。
人々は多くの場合、ディレクトリを共有したい場合は、python -m SimpleHttpServer
(またはpython3 -m http.server
)のようなpythonを実行します。完全に機能し単純なサーバーです。
私はおそらくHTTPのドキュメントを最初にチェックするべきだと言います。 RFCのように。 – zinking
- 1. フェデレーションサービスを使用せずにASP.NETでSAML 2.0を実装するにはどうすればよいですか?
- 2. どのような単純なpythonベースのWSGI互換jsonrpcライブラリ 'パジャマ'のサーバー側で使用するには?
- 3. Eclipseを使用して単純なサーブレットを作成するにはどうすればよいですか?
- 4. 外部ライブラリを使用せずにファイルを圧縮するにはどうすればよいですか?
- 5. ASP.Net MVC3を使用して簡単なWebサービスをセットアップするにはどうすればよいですか?
- 6. ストーリーボードを使用せずにiOS 5でマルチビューアプリケーションを使用するにはどうすればよいですか?
- 7. COMオートメーションを使用せずにWord文書を使用するにはどうすればよいですか?
- 8. javascriptライブラリを使用してemscriptenでSocket.ioを使用するにはどうすればよいですか?
- 9. AndroidでKSOAP2を使用せずにWebサービスを呼び出すにはどうすればよいですか?
- 10. AlertDialogを使用しないカスタムダイアログでキャンセルボタンを実装するにはどうすればよいですか?
- 11. APIを使用せずにプログラムで検索を実行するにはどうすればよいですか?
- 12. サンドボックスを使用せずにサンドボックスOS Xアプリを実行するにはどうすればよいですか?
- 13. MonoDevelopを使用せずにiPhoneシミュレータを実行するにはどうすればよいですか?
- 14. sbtを使用せずにsbt管理アプリケーションプロジェクトを実行するにはどうすればよいですか?
- 15. SWFobjectを使用して実装されたプレーヤーをカスタマイズするにはどうすればよいですか?
- 16. 単純なRubyクラスでsimple_formを使用するにはどうすればよいですか?
- 17. Retrofitなどを使用してファイルをサーバーにストリーミングするにはどうすればよいですか?
- 18. は単純なCRITICAL_SECTIONを使用してデッドロックされているようです
- 19. IIS 7で偽装を使用しないようにするにはどうすればよいですか?
- 20. drupal7でtheme_item_list()を使用してマルチレベルリストを実装するにはどうすればよいですか?
- 21. CoreServiceを使用してカスタムクラスでWCFトランザクションサポートを実装するにはどうすればよいですか?
- 22. C++で循環キューを使用してキューを実装するにはどうすればよいですか?
- 23. Node.JSを使用してAzure上でCOMETを実装するにはどうすればよいですか?
- 24. Scalaでvariadicメソッドを使用してJavaインターフェイスを実装するにはどうすればよいですか?
- 25. Javaを使用してRabbitMQでヘッダ交換を実装するにはどうすればよいですか?
- 26. コンソールアプリケーションで単純なテキストベースのメニューを実装するにはどうすればよいですか?
- 27. C++を使用して.asmx Webサービスを使用するにはどうすればよいですか?
- 28. Webフレームワークから汎用ライブラリを使用するにはどうすればよいですか?
- 29. マップを使用せずに不合理に単純な「find nearest」郵便番号アプリケーションを作成するにはどうすればよいですか?
- 30. Genericsを使用してコンパレータを実装するにはどうすればよいですか?
要件をさらに説明します(理由も説明します)。完全なアプリケーションレベルのスタックを実装したいのですか?たとえば、アプリケーションレベルのスタックを実装できますか? Apache?あなたが必要とするものをもっと説明してください*そしてなぜ。*最後に、あなたが "websocket"タグを持っているとき、それを意味するのか、それとも間違ったタグを使うのでしょうか? –
* *ライブラリを使用しないでください?確かに 'ソケット'は最低限必要になるでしょうか? – geoffspear
[こちらのドキュメント](http://docs.python.org/library/simplehttpserver.html)ページをチェックしてください。ここでは、「任意のライブラリ」はPythonのインストールに含まれていないライブラリです。 –