python3 HTTPServer/BaseHTTPRequestHandler 输出流问题
python3 HTTPServer/BaseHTTPRequestHandler output stream issue
我遇到了内置 python3 http.server 模块的问题。具体来说,BaseHTTPRequestHandler class.
中的 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()
原来我只是忘了在 GET 响应方法中更新 'Content-type'
header
self.send_header('Content-type', 'text/html; charset=utf-8')
我遇到了内置 python3 http.server 模块的问题。具体来说,BaseHTTPRequestHandler class.
中的 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()
原来我只是忘了在 GET 响应方法中更新 'Content-type'
header
self.send_header('Content-type', 'text/html; charset=utf-8')