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

Mitmproxy修改多Cookie请求头时被合并为单头服务端不接受如何解决

多独立Cookie头修改方案

问题本质

mitmproxy的Headers结构支持同名头存储多个独立值,直接通过flow.request.headers["cookie"] = xxx赋值时,会先清空所有已存在的cookie头,再写入单个传入值,最终把原本3个独立Cookie头合并为1个,不符合服务端的格式要求就会被拒绝。

可行操作方法

推荐用set_all()方法处理,逻辑简单不容易出错,核心思路是先取出所有独立Cookie头的值组成列表,修改列表中目标项后整体写回,不会破坏多独立头的结构:

# 1. 取出所有独立cookie头的值,返回值为列表格式
cookie_items = flow.request.headers.get_all("cookie")

# 2. 遍历列表定位需要修改的目标cookie,替换为新值
# 例:修改键为uuid的cookie值
target_key = b"uuid"
new_val = b"你的新uuid值"
for index, item in enumerate(cookie_items):
    if item.startswith(target_key + b"="):
        cookie_items[index] = target_key + b"=" + new_val
        break

# 3. 将修改后的cookie列表整体写回头部,保留多独立头格式
flow.request.headers.set_all("cookie", cookie_items)

如果需要同时处理其他非Cookie头的修改,也可以直接操作headers.fields底层元组:

updated_headers = []
for name, value in flow.request.headers.fields:
    # 非cookie头原封不动保留
    if name != b"cookie":
        updated_headers.append((name, value))
        continue
    # 单独处理每个cookie头
    if value.startswith(b"uuid="):
        # 替换目标cookie值
        updated_headers.append((b"cookie", b"uuid=你的新uuid值"))
    else:
        # 其余cookie保持原值
        updated_headers.append((b"cookie", value))
# 替换整个头集合
flow.request.headers.fields = tuple(updated_headers)

验证方式

修改完成后执行print(flow.request.headers),输出结果中仍然是3个独立的(b'cookie', b'xxx')元组,和原始请求的头格式完全一致,服务端可正常识别。

注意:操作头的键和值时统一用字节(bytes)类型,和mitmproxy内部存储格式一致,避免编码匹配失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:57:13