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

如何在mitmproxy中基于URL动态路由上游代理并处理认证

动态切换上游代理并处理认证的mitmproxy插件实现问题

各位Stack Overflow社区开发者好:

我正在使用mitmproxy开展项目,遇到需求挑战:需根据请求URL动态将请求路由至不同上游代理,同时处理这些代理的认证问题,希望得到实现指导或建议。

需求说明

  • 动态代理路由:
    • 若请求URL为https://example.com/123,mitmproxy需通过“Proxy A”转发;
    • 若URL为https://example.com/456,则使用“Proxy B”转发。
  • 代理认证处理:
    • “Proxy A”和“Proxy B”均需认证,需确保根据所选代理使用对应凭证。
  • 以插件形式实现:
    • 希望以mitmproxy插件实现,不使用--mode upstream:http://example.com:8081这类命令行参数。

尝试与调研

查阅mitmproxy文档后,未找到基于URL动态切换上游代理的明确方法,尤其是整合不同代理认证的实现方式。

问题

  • 如何在mitmproxy中通过编程方式根据URL路由请求至不同上游代理?
  • 针对不同凭证的代理,最有效的认证方法是什么?
  • 实现该功能需重点关注mitmproxy的哪些函数或模块?

任何代码示例、文档参考或实现思路都将极大帮助我。

感谢各位的帮助!

以下是我尝试但不满意的代码:

import base64
from mitmproxy import http

class DynamicUpstreamProxy:
    def __init__(self):
        self.proxy_A = ("upstream-proxy-A.com", 8081)
        self.proxy_B = ("upstream-proxy-B.com", 8082)
        self.proxy_A_auth = self.encode_credentials("usernameA", "passwordA")
        self.proxy_B_auth = self.encode_credentials("usernameB", "passwordB")

    def encode_credentials(self, username, password):
        credentials = f"{username}:{password}"
        encoded_credentials = base64.b64encode(credentials.encode()).decode()
        return f"Basic {encoded_credentials}"

    def request(self, flow: http.HTTPFlow):
        url = flow.request.pretty_url

        if url.startswith("https://example.com/123"):
            # Upstream Proxy A
            flow.live.change_upstream_proxy_server(self.proxy_A)
            flow.request.headers["Proxy-Authorization"] = self.proxy_A_auth

        elif url.startswith("https://example.com/456"):
            #  Upstream Proxy B
            flow.live.change_upstream_proxy_server(self.proxy_B)
            flow.request.headers["Proxy-Authorization"] = self.proxy_B_auth

addons = [
    DynamicUpstreamProxy()
]

运行插件的命令:

mitmproxy -s my_upstream_addon.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:03:11