文章目录
-
- 前言
- [一.启动 mitmproxy 常规(HTTP)代理](#一.启动 mitmproxy 常规(HTTP)代理)
-
- [1.1 配置文件方式(推荐)](#1.1 配置文件方式(推荐))
- [二.下载并安装 mitmproxy 的 CA 证书](#二.下载并安装 mitmproxy 的 CA 证书)
-
- [2.1 配置浏览器代理](#2.1 配置浏览器代理)
- [2.2 下载并安装证书](#2.2 下载并安装证书)
- [三、以代理方式启动并使用 OpenCode](#三、以代理方式启动并使用 OpenCode)
-
- [3.1 配置环境变量](#3.1 配置环境变量)
- [3.2 启动 OpenCode](#3.2 启动 OpenCode)
- 四、查看捕获的流量
-
- [4.1 关键信息位置](#4.1 关键信息位置)
- [4.2 示例:生成会话标题的请求](#4.2 示例:生成会话标题的请求)
- [4.3 示例:会话请求](#4.3 示例:会话请求)
- 五、进阶技巧与注意事项
-
- [5.1 处理 HTTPS 流量解密问题](#5.1 处理 HTTPS 流量解密问题)
- [5.2 保存与分析捕获的数据](#5.2 保存与分析捕获的数据)
- [5.3 自动化与高级过滤](#5.3 自动化与高级过滤)
- [5.4 注意事项与合规性](#5.4 注意事项与合规性)
前言
在上一篇文章中,我们介绍了 如何通过 mitmproxy 的本地捕获代理模式,获取 OpenCode 发起的 AI API 请求的详细信息。
本文将介绍另一种方式------通过 常规(HTTP)代理模式 来实现相同的目标。
一.启动 mitmproxy 常规(HTTP)代理
1.1 配置文件方式(推荐)
为了便于维护和管理,建议创建配置文件 ~/.mitmproxy/config.yaml ,将代理服务器的配置项持久化保存。这样可以避免每次启动时输入大量命令行参数。
yml
# ==========代理模式配置==========
# 要生成的代理服务器类型。可以多次传递。Mitmproxy 支持 "regular"(HTTP)、"local"、"transparent"、"socks5"、"reverse:SPEC"、"upstream:SPEC "和 "wireguard[:PATH]"代理服务器。默认值:['regular']
mode:
- regular
# 绑定代理服务器的端口(可根据具体模式重设,参见 `mode`)。默认情况下,端口与模式有关。默认的常规 HTTP 代理服务器端口为 8080。默认值:None
listen_port: 8080
# 网络用户界面端口。默认值:8081
web_port: 8081
# ==========安全与连接配置==========
# 使用主机头来构建要显示的 URL。
# 此选项默认已禁用,因为恶意应用程序可能会发送误导性的主机头来规避您的分析。如果不担心此问题,请启用此选项以获得更好的流量显示。
showhost: true
# 不验证上游服务器的 SSL/TLS 证书。如果启用此选项,将跳过证书验证,而 mitmproxy 本身将容易受到 TLS 拦截的攻击
ssl_insecure: true
# 上游证书。连接到上游服务器以查询证书详细信息。默认值:True
upstream_cert: false
# 连接策略。设置为懒惰时,mitmproxy 会尽量推迟建立上游连接。这样就可以在离线时使用服务器重放。选项:eager, lazy。默认值:eager
connection_strategy: lazy
# 忽略主机列表,转发所有流量而不进行处理。
ignore_hosts: []
# ==========TLS 版本配置(放宽限制以提高兼容性)==========
# 设置客户端连接的最小 TLS 版本。UNBOUNDED、SSL3、TLS1 和 TLS1_1 是不安全的。选项值:UNBOUNDED, SSL3, TLS1, TLS1_1, TLS1_2, TLS1_3。默认值:TLS1_2
tls_version_client_min: UNBOUNDED
# 设置客户端连接的最大 TLS 版本。UNBOUNDED、SSL3、TLS1 和 TLS1_1 是不安全的。默认值:UNBOUNDED
tls_version_client_max: UNBOUNDED
# 设置服务器连接的最小 TLS 版本。UNBOUNDED、SSL3、TLS1 和 TLS1_1 是不安全的。默认值:TLS1_2
tls_version_server_min: UNBOUNDED
# 设置服务器连接的最大 TLS 版本。UNBOUNDED、SSL3、TLS1 和 TLS1_1 是不安全的。默认值:UNBOUNDED
tls_version_server_max: UNBOUNDED
# ==========日志配置==========
# 日志详细程度。选项:error, warn, info, alert, debug。默认值:info
termlog_verbosity: debug
# 事件日志详细程度。选项:error, warn, info, alert, debug。默认值:info
console_eventlog_verbosity: debug
# 在流程列表中显示的列。
web_columns:
- timestamp
- tls
- icon
- path
- method
- status
- size
- time
配置完成后,只需在命令行运行以下命令即可启动 mitmproxy:
bash
mitmweb
启动后,系统会自动打开 Web 管理界面,访问地址为:http://127.0.0.1:8081。

二.下载并安装 mitmproxy 的 CA 证书
由于 mitmproxy 需要解密 HTTPS 流量,因此必须安装其 CA 证书才能正常工作。以下是详细步骤:
2.1 配置浏览器代理
首先,设置浏览器的 HTTP 代理:
- 代理地址 :
127.0.0.1 - 代理端口 :
8080(即前面配置文件中listen_port的值)

2.2 下载并安装证书
- 重启浏览器(确保代理设置生效)
- 访问证书下载页面:
https://mitm.it/ - 根据你的操作系统下载对应的证书
- 安装证书时,务必选择"受信任的根证书颁发机构"存储位置

重要提示:证书安装完成后,建议再次重启浏览器,确保证书生效。
三、以代理方式启动并使用 OpenCode
在启动 OpenCode 之前,需要配置环境变量,使其流量通过 mitmproxy 代理。请按照以下步骤操作:
3.1 配置环境变量
打开命令提示符(CMD)或 PowerShell,依次执行以下命令:
Windows CMD:
shell
set NODE_TLS_REJECT_UNAUTHORIZED=0
set PYTHONHTTPSVERIFY=0
set HTTP_PROXY=http://127.0.0.1:8080
set HTTPS_PROXY=http://127.0.0.1:8080
Windows PowerShell:
powershell
$env:NODE_TLS_REJECT_UNAUTHORIZED="0"
$env:PYTHONHTTPSVERIFY="0"
$env:HTTP_PROXY="http://127.0.0.1:8080"
$env:HTTPS_PROXY="http://127.0.0.1:8080"
说明:
NODE_TLS_REJECT_UNAUTHORIZED=0:禁用 Node.js 的 TLS 证书验证PYTHONHTTPSVERIFY=0:禁用 Python 的 HTTPS 证书验证HTTP_PROXY和HTTPS_PROXY:设置代理服务器地址
3.2 启动 OpenCode
在同一个命令行窗口中,运行 OpenCode:
cmd
opencode
启动后,选择大语言模型,输入提示词,按回车键发送请求。

四、查看捕获的流量
当 OpenCode 发起 API 请求后,可以在 mitmproxy 的 Web 界面中查看捕获的所有流量。以下是关键信息的查看方法:
4.1 关键信息位置
- URL :在请求详情中查看完整的
API端点路径 - 请求头(Headers) :检查
Headers部分,重点关注Authorization、Content-Type等关键字段 - 请求体(Request Body) :对于
POST请求,在Request Body中查看JSON或表单数据 - 响应(Response) :在
Response标签页中查看状态码、响应头和返回的JSON数据
4.2 示例:生成会话标题的请求
以下是生成会话标题的请求和响应示例:


4.3 示例:会话请求
以下是实际会话的请求和响应示例:


五、进阶技巧与注意事项
5.1 处理 HTTPS 流量解密问题
如果遇到 HTTPS 请求显示为乱码或无法解密的情况,请检查以下几点:
- 证书安装 :确保已正确安装
mitmproxy的CA证书,并设置为"受信任的根证书颁发机构" - 证书信任 :确保系统或应用程序(
OpenCode)信任该证书,否则可能出现TLS拦截失败 - 证书下载 :访问
https://mitm.it/下载对应平台的证书(支持Windows、macOS、Android、iOS)
5.2 保存与分析捕获的数据
mitmproxy 提供了多种方式保存捕获的流量数据:
方法一:命令行参数
bash
mitmweb --save-flows flows.json
方法二:Web 界面导出
在 Web 管理界面中,使用导出功能将会话保存为文件(如 flows.json)。
方法三:Python 脚本解析
导出后,可以使用 Python 脚本解析文件,提取结构化数据供进一步分析:
python
import json
with open('flows.json', 'r') as f:
flows = json.load(f)
for flow in flows:
print(f"URL: {flow['request']['url']}")
print(f"Method: {flow['request']['method']}")
5.3 自动化与高级过滤
可以通过编写 mitmproxy 脚本(Python)实现自动过滤和捕获目标请求:
python
def request(flow):
"""
自动捕获 OpenCode API 请求
"""
if "api.opencode.ai" in flow.request.url:
print(f"捕获到请求: {flow.request.url}")
print(f"请求头: {flow.request.headers}")
print(f"请求体: {flow.request.content}")
使用方法:
bash
mitmweb -s filter_script.py
通过正则表达式或域名匹配,可以精准捕获特定的 API 路径。
5.4 注意事项与合规性
在使用 mitmproxy 捕获流量时,请注意以下事项:
- 遵守服务条款 :确保操作符合
OpenCode的服务条款,仅用于合法调试或学习目的 - 数据安全:避免拦截敏感或个人数据,建议在测试环境中进行
- 双向 TLS :如果
API使用双向TLS或其他加密机制,需要额外配置客户端证书 - 隐私保护:不要分享或公开包含敏感信息的流量数据