如何确保Python HTTPServer请求处理器正确写入响应?及POST服务器响应丢失问题排查
Python HTTPServer POST响应为空,但write返回正确字节数?
我在Windows 11系统上用Python 3.13.13实现了一个仅处理POST请求的HTTP服务器,代码示例如下:
from http.server import HTTPServer, BaseHTTPRequestHandler import json class RequestHandler(BaseHTTPRequestHandler): def accept_request(self): self.send_response(200) self.send_header("Content-Type", "application/json") self.end_headers() def fetch_content(self): return json.loads(self.rfile.read(int(self.headers.get("Content-Length")))) def do_POST(self): if self.path.endswith("/whatever/endpoint"): # 获取请求体数据 body_data = self.fetch_content() # 确认请求 self.accept_request() # 处理接收的数据 # blablablabla.... # 生成JSON响应字符串 my_json_data_str = "{\"Key1\":\"value1\",\"key2\":\"value2\"}" # 回复 self.wfile.write(my_json_data_str.encode()) # <=== 此处为问题点 if __name__ == "__main__": http_server = HTTPServer(('', 8080), RequestHandler) http_server.serve_forever()
现在遇到了一个棘手的问题:客户端接收的响应为空。我尝试打印self.wfile.write()的返回值,它和预期发送的字节数完全一致,所以我认为数据应该已经实际发送出去了。我还试过在调用write之后执行self.wfile.flush(),但问题依旧没有解决。
另外,同一客户端访问同一机器(同一HTTP端口)上的另一个C++编写的服务器程序时,能正常接收响应,所以可以排除客户端自身的问题。
想请教一下:
- 为什么这个Python HTTP服务器的数据会在到达客户端前丢失?
- 如何确保HTTPServer的请求处理器确实写入了响应?
内容的提问来源于stack exchange,提问作者Fareanor
相关产品推荐
相关产品推荐

