You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python http.server/http.client传输字典或JSON数据

核心结论

HTTP协议仅支持字节流传输,无法直接传递Python原生字典对象。你当前使用str(dictionary).encode("utf-8")的方案存在严重的转义、解析容错问题,最优方案是将字典序列化为标准JSON格式传输。

服务端实现

需要使用Python内置的json模块完成序列化,同时正确设置响应头,避免客户端解析异常:

import json
from http.server import BaseHTTPRequestHandler

class CrawlHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 你的爬虫逻辑,执行后得到结果字典
        crawl_dict = {"status": "success", "data": {"title": "测试内容", "count": 10}}

        # 发送响应头
        self.send_response(200)
        self.send_header("Content-Type", "application/json; charset=utf-8")
        self.end_headers()

        # 序列化为JSON字节流后发送
        # ensure_ascii=False 避免中文被转义为Unicode编码
        json_bytes = json.dumps(crawl_dict, ensure_ascii=False).encode("utf-8")
        self.wfile.write(json_bytes)
客户端实现

收到响应后直接用json模块反序列化即可得到原生Python字典,无需自行解析字符串:

import json
from http.client import HTTPConnection

# 连接服务端
conn = HTTPConnection("127.0.0.1", 8000)
conn.request("GET", "/your_api_path")
resp = conn.getresponse()

# 反序列化得到字典
resp_content = resp.read()
result_dict = json.loads(resp_content.decode("utf-8"))

# 可直接操作字典
print(result_dict["data"]["title"])
特殊场景处理

如果你的字典包含JSON不支持的类型(比如datetime对象、自定义类实例等),可以通过json.dumps的default参数自定义序列化规则,示例:

from datetime import datetime

custom_dict = {"create_time": datetime.now(), "content": "test"}
json_str = json.dumps(custom_dict, default=lambda obj: obj.isoformat() if isinstance(obj, datetime) else str(obj))

内容的提问来源于stack exchange,提问作者user16241255

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:57:04