0

我遇到了内置 python3 http.server 模块的问题。具体来说,就是 BaseHTTPRequestHandler 类中的 wfile.write() 方法。

我正在尝试使用 GET 请求将预定义为字符串的 html 表单发送给客户端。到客户端的输出流被编码为类似字节的对象并传输到客户端。

但是,在客户端启动服务器时,它不会呈现为 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

0

原来我只是忘记'Content-type'在 GET 响应方法中更新标头

self.send_header('Content-type', 'text/html; charset=utf-8')
于 2017-09-22T07:27:05.450 回答