文章

proxyman

proxyman

Proxyman

https://proxyman.io/

Proxyman 安装

和 Charles 对比

  • 从流畅度、功能引导等方面,Proxyman 是比 Charles 好用的;Charles 在请求到非常大的响应体时,会卡住。
  • 除了以上介绍到的功能,还有很多更强大更全面的功能。例如远程映射、保存会话、GraphQL 调试、黑名单白名单、Protobuf、自定义脚本等等。

Mac OS 破解

如果是 10.11 后,需要运行允许任何来源的 App

sudo spctl --master-disable igwsy

Mac v 5.17.0 破解版 (2025 年 04 月 03 日可用):

破解后要注意: 证书可能需要重置 image.png

Proxyman 基本功能

Proxy List

  • 支持从 Charles 导入配置
  • 支持通配符 *?
  • 支持选择具体的 APP
  • 支持某个域名
  • 支持导出

image.png

导出请求和响应数据

选中具体的请求,点击鼠标右键,选择导出,然后再选择你要导出的格式:

image.png

不过这里导出的 Proxyman 日志需要使用 Proxyman 才能打开,也就是说,需要想查看这条请求的人的电脑上也安装 Proxyman,如果他没有安装,也可以选择拷贝 cURL

Request/Response Previewer 请求/响应预览器

安装证书并在域或客户端上启用 HTTP 响应 后,您的网络流量将立即显示在 Proxyman 窗口内,默认分为三个主要区域:

  • 左侧面板上的源列表
  • 中间面板上的流列表
  • 右侧面板上的流内容 image.png

正文内容预览器

取决于 Request 或 Response 的内容是什么:Proxyman 会自动显示在单独的选项卡中:

  • Header:所有表头(键值表)
  • Cookies :标头中的Cookie 键
  • Auth :标头中的身份验证密钥
  • Body : 消息正文:Proxyman 根据Content-Type 自动格式化和美化正文内容,例如 JSON、PNG、GIF、Raw Data、…
  • Query:如果请求有查询,则显示所有查询。
  • Raw:原始 HTTP 消息。
  • Protobuf 消息
  • 消息包
  • 多部分/表单数据

自定义预览器

  • 将 BODY 格式化为JSON ,但 Content-Type 不是 application/json
  • 将正文格式化为Protobuf,但 Content-Type 不是 application/x-protobuf
  • 在 Web 视图上呈现 HTML 页面
  • 美化缩小文件(HTML、CSS、JS)
  • 多部分/表单数据
  • 尝试将正文格式化为所选类型,而不管 Content-Type
  • 将消息包 (msgpack) 转换为 JSON
  • 生成器到 Swift、Node、Javascript、cURL……
  • GraphQL 查询更漂亮 image.png

Body 预览器

Body 预览器会自动美化内容并提供方便的次要功能:

  • Tree View : 以 Tree View 模式表示 JSON
  • Hex: 以十六进制格式显示正文
  • 仅导出正文:能够将您的正文内容导出到文件。适用于原始数据或二进制数据
  • 打开方式:您可以使用您喜欢的编辑器打开正文内容。Sublime Text 是 mime

Treeview

Proxyman 支持原生 JSON 树视图模式,它显示一个 JSON Body。它允许开发人员:

  • 按 JSON 搜索 JSON
  • 像 Google Developer Tool 一样复制 JSON 节点 image.png

SSL Proxying

Proxyman 默认不解析 HTTPS 流量,需打开 SSL 代理配置,并添加过滤规则,只有添加了规则的域名或应用才会自动解析,默认只能添加 5 条规则,超过 5 条或无限制需付费。

Proxyman 可以用作中间人,记录您的应用程序和 SSL Web 服务器之间的所有HTTP/HTTPS流量。Proxyman 将动态地即时生成证书,这使开发人员能够以纯文本形式查看 HTTPS 。

您可以为以下方面定义规则:

  • 包含列表 (Include List):拦截来自应用程序/域的流量,如果它在包含列表中
  • 排除列表 (Exclude List):忽略来自排除列表中的应用程序/域的所有流量

image.png

如何在特定域或应用程序上启用 SSL 代理(两种方式)

  • 右键单击左侧面板上的应用程序或域 -> 启用 SSL 代理 image.png
  • 右键单击请求 -> 启用 SSL 代理 image.png

证书配置

为了拦截加密的 HTTPS 消息(请求或响应),您必须在当前计算机上安装Proxyman CA 证书。 此步骤对于 iOS、Android 设备、iOS 模拟器、Java VM 和 Firefox 也是强制性的。

手机

手机端通过证书菜单 ->在 IOS 或 Android 上安装证书,然后根据提示在所连接的 Wi-Fi 修改代理 IP 和端口,访问 http://proxy.man/ssl 即可下载 proxyman 的证书,安装即可。

Proxyman 针对 iOS 开发还提供了一种无配置的方案,可以直接通过 Pod 或者 SPM 添加 atlantis-proxyman 框架,这样可以在不进行任何配置的情况下进行代理监听:

Windows

自动代理,安装证书

Mac

以 Mac 端配置为例:

  • Certificate→Install Certificate on this Mac image.png
  • 安装成功后,可以在设置中查看是否已安装,标号 1 代表安装成功,标号 2 或 3 可查看代理端口号 image.png
  • 证书安装配置完成后,通过浏览器访问相关页面(需开启 Proxyman)即可看到抓包信息了

Import and Export settings

Import

  • 从 Charles [[Charles|Charles Settings]] image.png

  • 从 Proxyman image.png

Export

Proxyman 没有一个能导出所有配置的选项,只能一个个去导出。

Proxyman 高级功能

Wildcard 和 Regex 通配符和正则表达式

Wildcard 通配符

通常仅支持少量特殊符号(如 * 和 ?)。

  • *:匹配任意数量的任意字符(包括 0 个字符)。
  • ?:匹配单个任意字符。
  • 示例
    • *.jpg:匹配所有以 .jpg 结尾的文件名(如 photo.jpgimage.jpg)。
    • file?.txt:匹配 file1.txtfileA.txt,但不匹配 file10.txt

Regex 正则

支持丰富的符号和规则,如:

  • .:匹配任意单个字符(类似通配符的 ?)。
  • *:表示前一个字符重复 0 次或多次(注意:与通配符的 * 含义不同)。
  • +:前一个字符重复 1 次或多次。
  • []:字符类(如 [a-z] 匹配任何小写字母)。
  • ^ 和 $:匹配字符串的开始和结束。
  • \d:匹配数字,\w 匹配单词字符等。
  • 示例
    • ^user\d+@example\.com$:匹配以 user 开头、后接至少一个数字,并以 @example.com 结尾的邮箱(如 user123@example.com)。
    • .*\.jpg$:匹配所有以 .jpg 结尾的字符串(类似通配符的 *.jpg)。

Map 映射

Map Local

参考:[Map Local (File)Proxyman Documentation](https://docs.proxyman.com/advanced-features/map-local)
Map Local (File)

  • 使用
Map Local (Directory)

指定一个目录,存放和请求一样的资源,优先本地,没有的话走远端网络

Map Local 设置 delay 时间

image.png

Map Local with Scripting Tool

Map Remote

  • 通配符匹配 image.png
参考:[Map RemoteProxyman Documentation](https://docs.proxyman.com/advanced-features/map-remote)

疑惑

Map Local 和 Map Remote 能同时生效吗?

  • Charles 是可以的同时生效的
  • Proxyman 不行,Proxyman 同时设置,只有 Map Local 生效
  • Map Local 和 Script 可以同时生效

Edit and Repeat 编辑并重发请求

对于需要直接在 Proxyman 应用程序上测试 Endpoint 而无需从浏览器或客户端应用程序发出新请求的开发人员来说,Edit & Repeat 是一个方便的工具。

选择请求→右键 Edit And Repeat

image.png

Compose Request 编辑新的请求

Proxyman 可以同 Postman 或 ApiPost 等工具一样新建请求,填写请求头及请求参数进行 GET、POST 等请求,调试验证接口。

通过主界面 Tools -> Compose Request,进入接口编辑窗口进行网址、请求方法、参数等信息的填写,并确定发送请求

image.png

Code Generator 代码生成

可帮助你自动生成针对特定代码语言的 HTTP/HTTPS 请求

image.png

Breakpoint 断点

断点是一种方便的工具,可帮助开发人员动态编辑请求和响应的内容。可以在请求或响应上设置断点

  • 修改请求 URL,包括 Scheme、Host、Path、Port、HTTP Method(适用于 Proxyman 2.35.4+)
  • 修改请求/响应的 HTTP 标头
  • 修改请求中的查询或表单条目
  • 修改 Authorization/Cookie/Set-Cookie 标头
  • 修改请求/响应的 HTTP 正文
  • 更改响应 HTTP 状态代码

右键单击请求 -> Tools -> Breakpoint

image.png

Network Conditions 模拟弱网

点击顶部菜单栏,选择 Tools -> Network Conditions,可以打开一个新页面,然后点击左下角为一个新的域名添加网络状况,这里可以根据你的需求选择不同的网络状况:

比如: 根据 host 和 port 模拟 2 G 网络 image.png

No Caching 无缓存

阻止 Http 缓存。

如何工作的? image.png

Reverse Proxy(反向代理)

Proxyman 中的 Reverse Proxy(反向代理) 是一个强大的功能,主要用于将外部请求(如来自移动端、浏览器或其他客户端的请求)透明地转发到开发者指定的本地或远程服务器,同时允许拦截、分析和修改这些请求与响应。它的核心作用是为开发调试、测试和问题排查提供灵活的控制权。

Scripts 自定义脚本

基础

Proxyman 提供了脚本功能,开发人员可以编写 JS 代码以灵活的方式操作 Request/Response。

  • 通过 JS 代码实现 Map Local / Map Remote / Breakpoint。快 100 倍
  • 更改请求内容,包括 Domain、Host、Scheme、Port、Path、HTTP Method、HTTP Headers、Query、Body (Encoded-Form、JSON、plain-text)
  • 更改响应内容,包括 HTTP Status Code、HTTP Headers、Body(JSON、Encoded-Form、plain-text、binary…)
  • 为常见任务提供大量内置插件和库,例如散列、编码/解码、JSON- 文本转换器、美化……
  • 能够编写自己的 JS 插件或库
  • 旨在取代 Charles Proxy 的 Rewrite GUI Tool
  • 使用 ShareState 或环境在每个脚本或当前会话之间分配和接收共享状态

多个符合条件 script,只会命中第一个 script 脚本

应用

实现 mapLocal

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
async function onRequest(context, url, request) {
  // 匹配需要映射的请求路径
  if (request.path === "/api/data") {
    // 读取本地文件(路径需为绝对路径)
    const fileContent = context.readFile("/Users/YourName/mock_data.json");
    
    // 返回自定义响应
    return {
      statusCode: 200,
      header: {
        "Content-Type": "application/json",
        "X-Mocked-By": "Proxyman"
      },
      body: fileContent
    };
  }
  
  // 其他请求正常放行
  return request;
}

实现 mapRemote

映射到 gray01 环境

1
2
3
4
5
6
7
8
9
10
11
async function onRequest(context, url, request) {
  // Use production URL
  request.scheme = "https";
  request.host = "api-service-gray01.xxx.com";
  request.port = 443;
  return request;
}
async function onResponse(context, url, request, response) {
  response.color = "purple";
  return response;
}

image.png

购物车应用

  • 对 request 和 response 添加 comment 和 color
  • 将 response 保存到磁盘
  • 购物车接口很庞大
  • 分不同部分保存
  • 对商品行的数据根据商品名进行重命名,方便定位,加上 index 和其他前缀

Ref

本文由作者按照 CC BY 4.0 进行授权