BaseHTTPServerを使用するPythonコースを受講しています。彼らが始めるコードはここにあります
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
class webServerHandler(BaseHTTPRequestHandler):
def do_GET(self):
try:
if self.path.endswith("/hello"):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
message = ""
message += "<html><body>Hello!</body></html>"
self.wfile.write(message)
print message
return
except IOError:
self.send_error(404, 'File Not Found: %s' % self.path)
def main():
try:
port = 8080
server = HTTPServer(('', port), webServerHandler)
print "Web Server running on port %s" % port
server.serve_forever()
except KeyboardInterrupt:
print " ^C entered, stopping web server...."
server.socket.close()
if __name__ == '__main__':
main()
私はどこでも python を使用していますが、アプリケーションをインターネットに接続する唯一の方法は、wsgi インターフェイスを使用することです。
wsgi インターフェースの構成ファイルは次のようになります。
import sys
path = '<path to app>'
if path not in sys.path:
sys.path.append(path)
from app import application
アプリケーションは次のようになります。
def application(environ, start_response):
if environ.get('PATH_INFO') == '/':
status = '200 OK'
content = HELLO_WORLD
else:
status = '404 NOT FOUND'
content = 'Page not found.'
response_headers = [('Content-Type', 'text/html'), ('Content-Length', str(len(content)))]
start_response(status, response_headers)
yield content.encode('utf8')
HELLO_WORLD は、html コンテンツを含む文字列になります。
例のようにポート 8080 を指定することはできません。どこでもPythonを使用するには、両方をインターフェースする必要があります。wsgi が BaseHTTPServer から派生している可能性があると考えたので、それらをインターフェースして、pythonanywhere.com で私のコースを使用することが可能かもしれません。
メイン関数のコードを取り除き、代わりにアプリケーション関数を使用する必要があることは明らかです。しかし、これがどのように機能するか正確にはわかりません。呼び出したコールバック (start_response) を取得し、コンテンツを取得しますか? これを webServerHandler クラスと組み合わせるにはどうすればよいですか?
これが可能であれば、理論上は Google アプリ エンジンでも機能するはずです。ここで BaseHTTPServer が使用されている非常に複雑な例を見つけましたが、これはまだ複雑すぎます。
これを行うことは可能ですか? はいの場合、誰かがこれを行う方法のヒントを教えてくれ、基本的な開始コードを提供してくれますか?