組み込みの python3 http.server モジュールで問題に直面しました。具体的には BaseHTTPRequestHandler クラスの wfile.write() メソッド。
文字列として事前定義された html フォームをクライアントに GET リクエストで送信しようとしています。クライアントへの出力ストリームは、バイトのようなオブジェクトとしてエンコードされ、クライアントに転送されます。
ただし、クライアント側では、サーバーの起動時に HTML 形式としてレンダリングされません。<pre>
最終的にタグにラップされ、書式設定済みのテキストとして表示されます。
コードは次のとおりです。
#!/usr/bin/env python3
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import parse_qs
form = '''<!DOCTYPE html>
<title>Message Board</title>
<form method="POST" action="http://localhost:8000/">
<textarea name="message"></textarea>
<br>
<button type="submit">Post it!</button>
</form>'''
class MessageHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/plain; charset=utf-8')
self.end_headers()
self.wfile.write(form.encode())
if __name__ == '__main__':
server_address = ('', 8000)
httpd = HTTPServer(server_address, MessageHandler)
httpd.serve_forever()