83

我正在使用 Charles Proxy 重写来自 API 的响应以进行测试。

如果我设置了一个断点,我可以按照我的意愿完全重写原始响应。

但是,如果我想通过“重写”工具自动化它,我就卡住了,似乎你无法修改状态码:

重写规则面板

你知道我是否遗漏了什么吗?

4

7 回答 7

134

更新:Charles Proxy 3.8 版刚刚发布,具有重写状态的能力。从发行说明

  • 重写工具:允许重写响应状态

此版本的重写 UI 添加了新的“响应状态”规则类型:

在此处输入图像描述

于 2013-09-06T23:16:46.937 回答
26

1- 选择Tools > RewriteOPTION + CMD + R

重写选择


2-选择Enable Rewrite然后选择Add

启用重写选择


3-用您的详细信息填写字段

细节


4-添加类型和动作

类型和操作


5- 选择动作类型 -Response Status对于我们的例子 - 写入要更改的值 -500-,写入要替换的值 -200-

配置类型和操作


最后一步:

6-您已准备好与 Charles 一起操作响应的状态代码

最后

Charles Web Debugging Proxy 官方网站

于 2019-12-30T10:46:11.703 回答
17

使用 Charles 3.8+,您可以重写状态码。

在重写工具中,选择“类型:响应状态”。在匹配字段和替换字段中,请注意 Charles 希望传入和重写的状态与格式匹配"\d{3} .*"。这意味着您重写的状态除了数字状态代码之外还必须有一个消息部分。

例如:

匹配值:201 .*

替换值:502 Bad Gateway

从替换值中省略消息将导致不重写状态行。您可以在每次通话摘要的备注部分中查看 Charles 的重写工具输出消息。

于 2014-03-31T22:34:11.810 回答
11

这不是您问题的直接答案,但正如我在上面的评论中指出的那样,我处于同样的情况,我找到了一个使用适合我的不同工具的解决方案。

我没有使用 Charles,而是使用这个简短的 Python重写脚本运行mitmproxy,特别是mitmdump

#!/usr/bin/env python

def response(context, flow):
    if '/somePath' not in flow.request.path:
        return

    flow.response.status_code = 404

要将其连接到代理中,我运行mitmdump如下:

mitmdump -s /path/to/rewriting-script.py

而且效果很好。

我在 OS X 上,我将网络接口的 Web 代理配置为 127.0.0.1 端口 8080。

于 2013-05-09T20:20:34.983 回答
4

最终编辑:Marc Liyanage 的答案现在对于这个问题是最正确的。

不,你不是,我认为不可能重写状态码。

我无法将此添加为评论(新用户),但一种解决方法是:

  1. 在将返回您需要的代码的服务器上创建资源,或者找到那些可以返回的资源。
  2. 使用 Map Remote 功能,映射到返回代码的资源。

我已经尝试使用 Map Local,这将是完美的,但查尔斯将它自己的 200 OK 状态代码添加到所有返回的文件中。

编辑:您也可以在单个响应上使用断点并修改代码。

于 2013-06-19T15:19:24.657 回答
1

使用Requestly 桌面应用程序,您不仅可以修改请求的响应,还可以在 30 秒内修改状态码和状态码。

除此之外,您还可以:

  • 为需要匹配的 URL 定义正则表达式/通配符模式。
  • 保存规则(这样就不需要一次又一次地修改状态码)。

以下是基本响应修改规则的样子 在此处输入图像描述

这是相同的快速演示。 https://youtu.be/nLcIZGmMatQ

于 2022-01-10T10:54:34.130 回答
1

这不是查尔斯的直接答案,但您可以编写 JS 代码以使用Proxyman轻松更改 HTTP 响应(脚本功能

例如,

function onResponse(url, request, response) {
    // Change to 404 status code for the matching request
    response.statusCode = 404; 
    return response;
}

这是您可以执行的代码段的完整列表:

免责声明:我是 Proxyman 的创建者。希望它可以帮助你。

于 2020-08-29T07:16:12.407 回答