可以使用Charles Proxy重写状态代码吗?


70

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

如果设置了断点,则可以根据需要完全重写原始响应。

但是,如果我想通过“重写”工具使其自动化,则很麻烦,看来您无法修改状态码:

重写规则面板

你知道我是否想念什么吗?


1
我只是想知道同样的事情。我现在确实需要此功能,因此我向Charles Proxy的作者发送了支持请求。如果我知道这样做的方法,我会报告。
马克·利雅纳奇

Answers:


120

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

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

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

在此处输入图片说明


完美运作。谢谢
Janusz 2014年

44
在我的Charles(3.10.1)版本中,我必须同时输入状态代码和消息才能进行重写。为了使上面的示例正常工作,我必须将“ 500”替换为“ 500 Error”。
emidander

17

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

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

例如:

匹配值:201。*

替换值:502错误网关

从替换值中忽略该消息将导致不重写状态行。您可以在每个呼叫摘要的“注释”部分中看到Charles的重写工具输出消息。


13

1-选择Tools > RewriteOPTION + CMD + R

重写选择


2-选择Enable Rewrite,然后选择Add

启用重写选择


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

细节


4-添加类型和动作

类型和动作


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

配置类型和动作


最后一步:

6-您准备好与Charles一起使用回复的状态码

最后

Charles Web调试代理的官方网站


11

这不是您问题的直接答案,但是正如我在上面的评论中所指出的那样,我处在相同的情况下,并且我发现了使用其他工具的解决方案,该工具对我来说效果很好。

我使用以下简短的Python重写脚本而不是Charles来运行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。


4

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

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

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

  1. 在服务器上创建资源,该资源将返回您需要的代码,或者找到需要的代码。
  2. 使用“映射远程”功能,映射到返回代码的资源。

我尝试使用Map Local,这对它来说是完美的选择,但是Charles将其自己的200 OK状态代码添加到所有返回的文件中。

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


1
对于新版本的Charles(3.8 +),Marc Liyanage答案是正确的答案。
alejandromp 2014年

0

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

例如,

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

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

免责声明:我是Proxyman的创建者。希望它能对您有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.