如何绕过Python requests/urllib3的HTTP中间人攻击防护机制?
可行方案
可修改源码重新编译的最优方案
这种方案不会降低SSL安全等级,只会额外信任你指定的抓包工具证书:
- 导出Fiddler/HTTP Debugger的根证书为PEM格式,保存为
proxy_rootca.crt - 全局替换请求的
verify参数为证书路径,示例代码:
import requests # 单请求指定 resp = requests.get("你的API地址", verify="./proxy_rootca.crt") # 全局生效不需要逐个改请求 session = requests.Session() session.verify = "./proxy_rootca.crt" resp = session.get("你的API地址")
- 打包exe时可以将证书和exe放在同一目录分发,或者用PyInstaller的
--add-data参数把证书打包进exe内部,运行时读取内部资源即可。
已编译为exe无法修改源码的方案
不需要改动程序本身就能解决报错:
- 方案1:将抓包工具的根证书安装到当前操作系统的「受信任的根证书颁发机构」存储中,requests默认会读取系统信任的根证书列表,安装后直接运行exe即可正常抓包
- 方案2:设置系统环境变量
REQUESTS_CA_BUNDLE,值为你导出的PEM格式根证书的完整本地路径,requests启动时会优先读取该环境变量指定的证书作为信任根,不需要修改系统CA存储,用完删除环境变量即可恢复原状。
注意:以上操作仅可用于你持有合法使用权的自有程序和API接口,禁止用于非法篡改、未授权的网络请求拦截。
内容的提问来源于stack exchange,提问作者Exodus
相关产品推荐
相关产品推荐

