如何在mitmproxy中基于URL动态路由上游代理并处理认证
动态切换上游代理并处理认证的mitmproxy插件实现问题
各位Stack Overflow社区开发者好:
我正在使用mitmproxy开展项目,遇到需求挑战:需根据请求URL动态将请求路由至不同上游代理,同时处理这些代理的认证问题,希望得到实现指导或建议。
需求说明
- 动态代理路由:
- 若请求URL为
https://example.com/123,mitmproxy需通过“Proxy A”转发; - 若URL为
https://example.com/456,则使用“Proxy B”转发。
- 若请求URL为
- 代理认证处理:
- “Proxy A”和“Proxy B”均需认证,需确保根据所选代理使用对应凭证。
- 以插件形式实现:
- 希望以mitmproxy插件实现,不使用
--mode upstream:http://example.com:8081这类命令行参数。
- 希望以mitmproxy插件实现,不使用
尝试与调研
查阅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
相关产品推荐
相关产品推荐

