通过Proxyman可正常发送Post请求,Python调用却返回401
问题分析与调试方案
可能的原因
- TLS/SSL握手参数不匹配:直接用Python发送请求时,TLS版本、加密套件和Proxyman代理后的请求不一致。部分API服务器会校验TLS配置,仅允许特定版本或套件的请求通过,而Proxyman代理会自动调整这些参数,使其符合服务器要求。
- 请求头隐式差异:虽然手动指定了headers,但
requests库会自动添加默认头(如Connection、Content-Length),或在无代理场景下修改部分头的取值。另外Accept-Encoding字段在直接请求时,实际生效的压缩方式可能和设置的不一致,导致服务器拒绝。 - 服务器代理信任逻辑:部分API会验证请求是否来自可信代理环境,Proxyman的CONNECT请求建立的隧道会被服务器标记为可信来源,而直接请求的连接方式不在信任列表中,因此返回401。
- 会话上下文差异:Proxyman终端可能保留了之前请求的Cookie或会话状态,而直接运行脚本是全新会话,导致身份校验失败(虽你说请求数据完全相同,但仍需排查此点)。
调试步骤
对齐TLS配置
查看Proxyman中成功请求的TLS版本和加密套件,在Python中强制使用相同配置:import ssl import requests from requests.adapters import HTTPAdapter from urllib3.poolmanager import PoolManager class TLSAdapter(HTTPAdapter): def init_poolmanager(self, *args, **kwargs): ctx = ssl.create_default_context() # 替换为Proxyman中显示的加密套件 ctx.set_ciphers('ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256') # 禁用服务器不支持的旧TLS版本 ctx.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 kwargs['ssl_context'] = ctx return super().init_poolmanager(*args, **kwargs) session = requests.Session() session.mount('https://', TLSAdapter()) response = session.post( url="https://auth.site.com/v2/users/sessions", headers=headers, json=data )消除请求头隐式差异
清空requests默认头,完全手动匹配Proxyman中的所有请求头字段:session = requests.Session() session.headers.clear() # 确保headers包含Proxyman中显示的所有字段,包括Connection、Content-Length等 session.headers.update(headers) response = session.post( url="https://auth.site.com/v2/users/sessions", json=data )通过Proxyman代理Python请求
将Python请求通过Proxyman代理,验证是否能正常工作,同时对比代理前后的请求细节:proxies = { 'http': 'http://127.0.0.1:9090', 'https': 'http://127.0.0.1:9090' } response = requests.post( url="https://auth.site.com/v2/users/sessions", headers=headers, json=data, proxies=proxies, verify=False # 忽略Proxyman自签证书的校验 )如果此方式能成功,说明问题出在直接请求的连接参数上,可进一步抓包对比差异。
抓包对比完整流量
用Wireshark抓取两种场景下的完整流量:直接运行Python脚本的流量、Proxyman终端运行脚本的流量。重点对比TLS握手过程、请求头的二进制内容、请求体编码细节,排查是否存在细微差异(如换行符、空格、编码格式)。验证会话上下文
在Proxyman中清空所有会话Cookie后,再通过Proxyman终端运行脚本,看是否仍能成功。如果此时也返回401,说明之前的成功依赖于保留的会话信息,需调整脚本添加对应的Cookie或会话参数。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

