【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_PROXYHTTPS_PROXY:设置代理服务器地址

3.2 启动 OpenCode

在同一个命令行窗口中,运行 OpenCode

cmd 复制代码
opencode

启动后,选择大语言模型,输入提示词,按回车键发送请求。

四、查看捕获的流量

OpenCode 发起 API 请求后,可以在 mitmproxyWeb 界面中查看捕获的所有流量。以下是关键信息的查看方法:

4.1 关键信息位置

  • URL :在请求详情中查看完整的 API 端点路径
  • 请求头(Headers) :检查 Headers 部分,重点关注 AuthorizationContent-Type 等关键字段
  • 请求体(Request Body) :对于 POST 请求,在 Request Body 中查看 JSON 或表单数据
  • 响应(Response) :在 Response 标签页中查看状态码、响应头和返回的 JSON 数据

4.2 示例:生成会话标题的请求

以下是生成会话标题的请求和响应示例:

4.3 示例:会话请求

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

五、进阶技巧与注意事项

5.1 处理 HTTPS 流量解密问题

如果遇到 HTTPS 请求显示为乱码或无法解密的情况,请检查以下几点:

  1. 证书安装 :确保已正确安装 mitmproxyCA 证书,并设置为"受信任的根证书颁发机构"
  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. 隐私保护:不要分享或公开包含敏感信息的流量数据
相关推荐
gs8014036 分钟前
网络隐形杀手:从 Could not connect to SMTP host 报错深度剖析 Docker MTU 黑洞理论与实战
网络·docker·容器
青山师44 分钟前
动态规划算法深度解析:从状态转移方程到工业级优化
数据结构·算法·面试·动态规划·代理模式·java面试
wanhengidc1 小时前
云手机搬砖 像僵尸开炮
运维·网络·智能手机·云计算
信息安全失业大专人员1 小时前
HTTP/HTTPS 协议精髓与 WAF(Web 应用防火墙)架构防线大底座
web安全·http·信息安全·https·企业信息安全
星恒讯工业路由器1 小时前
5G‑A大上行:七大技术补短板
网络·信息与通信·6g·5g‑a·5g-a大上行
蒸蛋一级爱好者2 小时前
IO多路复用和并发服务器
网络
二等饼干~za8986682 小时前
geo优化源码开发搭建技术分享
大数据·网络·数据库·人工智能·音视频
Hommy882 小时前
【剪映小助手】贴纸处理接口
网络·开源·github·aigc·剪映小助手·视频剪辑自动化
志栋智能2 小时前
超越监控:超自动化巡检提供的主动价值
运维·网络·人工智能·自动化