基于BaseHTTPRequestHandler的POST请求返回JSON失败问题排查
问题解决:POST请求返回JSON内容失败
你的服务器代码存在关键错误,导致客户端无法正确接收JSON响应:
错误原因
在do_POST方法中,你重复调用了send_response方法,并且第二次传入了无效的状态码2:
self.send_response(200) self.send_response(2) # 这行是错误的
send_response会向客户端发送HTTP状态行,重复调用会导致响应头格式混乱,客户端无法正确解析后续的响应内容——即便状态码显示为200,实际响应结构已经被破坏。
修正后的代码
import json from http.server import BaseHTTPRequestHandler, HTTPServer class RequestHandler(BaseHTTPRequestHandler): def do_POST(self): content_length = int(self.headers["Content-Length"]) post_data = self.rfile.read(content_length) json_data = json.loads(post_data) response_data = { "message": "Received POST request", "data": json_data } response_json = json.dumps(response_data).encode('utf-8') self.send_response(200) self.send_header("Content-type", "application/json") self.send_header("Content-Length", str(len(response_json))) # 可选但推荐,明确响应长度 self.end_headers() self.wfile.write(response_json) def run_server(): host = "localhost" port = 8000 server = HTTPServer((host, port), RequestHandler) print(f"Server running on {host}:{port}") server.serve_forever() if __name__ == "__main__": run_server()
验证修正效果
修改请求代码,打印响应内容确认:
import requests response = requests.post('http://localhost:8000', json={'key': 'value'}) print(response.json())
此时会输出预期的JSON内容:
{"message": "Received POST request", "data": {"key": "value"}}
内容的提问来源于stack exchange,提问作者Vladislav
相关产品推荐
相关产品推荐

