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

如何在Mitmproxy插件中正确发起HTTP/HTTPS网络请求

Mitmproxy插件内部发起HTTP请求的解决方案

问题根因

你遇到的报错本质是请求链路出现死循环:Mitmproxy启动后默认会接管系统代理,你在插件内调用requests时,默认会走Mitmproxy自身的代理,导致请求回环,最终出现超时、SSL校验失败等问题。

方案1:请求直接走直连(最常用,适合不需要经过Mitmproxy处理的第三方请求)

直接在requests请求参数中显式禁用代理即可,不需要配置任何代理信息,示例代码如下:

import requests

# 替换为你要请求的目标地址
target_url = "https://example.com/your-endpoint"
# 显式禁用代理,让请求直接走公网链路,不经过Mitmproxy
resp = requests.get(
    target_url,
    proxies={"http": None, "https": None},
    # 若目标站点证书不受信,可临时加verify=False,生产环境建议指定可信CA证书路径
    # verify=False
)

这个方案可以直接解决你遇到的ValueError: check_hostname requires server_hostname和代理超时两类报错。

方案2:请求需要经过Mitmproxy处理

如果你确实需要让插件内发起的请求也经过Mitmproxy的规则过滤/修改,需要修正你之前的代理配置:

  1. HTTPS代理的地址前缀要写http而非https,Mitmproxy的代理端口接收的是HTTP类型的代理请求
  2. 显式指定Mitmproxy的根证书路径,避免SSL校验报错
    示例代码如下:
import requests

mitmproxy_port = 8080 # 替换为你实际的Mitmproxy监听端口
# 替换为你本地Mitmproxy根证书的实际路径,Windows默认路径为C:\Users\用户名\.mitmproxy\mitmproxy-ca-cert.pem
ca_path = r"C:\Users\Administrator\.mitmproxy\mitmproxy-ca-cert.pem"

proxies = {
    "http": f"http://127.0.0.1:{mitmproxy_port}",
    "https": f"http://127.0.0.1:{mitmproxy_port}"
}

resp = requests.get(
    "https://example.com/your-endpoint",
    proxies=proxies,
    verify=ca_path
)

注意事项

不要在response事件回调中发起耗时过长的同步请求,否则会阻塞Mitmproxy的流量转发逻辑,影响整体性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:12:01