【mitmproxy】通过 mitmproxy 的HTTP代理模式获取 OpenCode 发起的 AI API 请求的详细信息

文章目录

    • 前言
    • [一.启动 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 下载并安装证书

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

重要提示:证书安装完成后,建议再次重启浏览器,确保证书生效。

三、以代理方式启动并使用 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 请求显示为乱码或无法解密的情况,请检查以下几点:

  1. 证书安装 :确保已正确安装 mitmproxy 的 CA 证书,并设置为"受信任的根证书颁发机构"
  2. 证书信任 :确保系统或应用程序( OpenCode )信任该证书,否则可能出现 TLS 拦截失败
  3. 证书下载 :访问 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 捕获流量时,请注意以下事项:

  1. 遵守服务条款 :确保操作符合 OpenCode 的服务条款,仅用于合法调试或学习目的
  2. 数据安全:避免拦截敏感或个人数据,建议在测试环境中进行
  3. 双向 TLS :如果 API 使用双向 TLS 或其他加密机制,需要额外配置客户端证书
  4. 隐私保护:不要分享或公开包含敏感信息的流量数据
相关推荐
starzy19902 小时前
Flink 优化之网络缓存优化及参数详解:从数据传输机制到反压原理的生产调优指南
网络·缓存·flink
正经教主3 小时前
【FDE系列】阶段3:Day 58:Prompt 安全 — 注入、越狱与防护
网络·人工智能·安全·prompt·fde
实点科技4 小时前
实点科技IO-Link I/O IOL7A/B系列参数配置方法介绍
网络
吴声子夜歌4 小时前
Nginx应用与运维——Nginx HTTP模块详解(动态赋值功能模块)
运维·nginx·http
梦帮科技5 小时前
LoRA / QLoRA 低秩矩阵流形更新:SVD 分解、秩与缩放因子 α 的物理意义与梯度稳定性保障
网络·深度学习·神经网络·线性代数·矩阵·架构·数据挖掘
阿钱真强道5 小时前
28 嵌入式操作系统 | 网关加 TCP 命令通道:粘包/半包怎么切
网络·网络协议·tcp/ip·粘包
HY小宝F6 小时前
树莓派智能摄像头系统 30 天重学计划之 Day 03 · 网络基础:建立“包“的思维 —— 学习总结
网络·学习
ayaya_mana6 小时前
MCTier 组网联机工具:安装、配置与私有化部署
网络·windows·内网穿透·联机
故七月6 小时前
GEO 信源评估体系:如何判断一条网页信源能否被大模型采信
前端·网络·人工智能
hasty6 小时前
一次 WebSocket 握手为何能终止进程?Undici CVE-2026-19534 的异常边界
网络·websocket·网络协议