0

組み込みの 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()
4

1 に答える 1