【问题标题】:Is it possible to rewrite a status code with Charles Proxy?是否可以使用 Charles Proxy 重写状态码?
【发布时间】:2012-12-30 20:57:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我只是想知道同样的事情。我现在正是需要这个功能,所以我向 Charles Proxy 的作者发送了支持请求。如果我知道如何做到这一点,我会报告。

标签: proxy rewrite charles-proxy


【解决方案1】:

使用Requestly Desktop App,不仅可以修改请求的响应,还可以在30秒内修改状态码。

除此之外,您还可以:

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

基本响应修改规则如下所示

这里有一个相同的快速演示。 https://youtu.be/nLcIZGmMAtQ

【讨论】:

    【解决方案2】:

    不是直接回答Charles,但是可以写JS代码用Proxyman(Scripting feature)轻松改变HTTP Response

    例如,

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

    这里是您可以执行的Snippet Code 的完整列表:

    免责声明:我是 Proxyman 的创建者。希望对你有帮助。

    【讨论】:

      【解决方案3】:

      1- 选择Tools > RewriteOPTION + CMD + R


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


      3- 填写您的详细信息


      4- 添加类型和操作


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


      最后一步:

      6- 您已准备好使用 Charles 操作响应的状态代码

      Official site of Charles Web Debugging Proxy

      【讨论】:

        【解决方案4】:

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

        我用这个简短的 Python rewriting script 运行 mitmproxy,特别是 mitmdump,而不是 Charles:

        #!/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。

        【讨论】:

          【解决方案5】:

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

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

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

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

          我尝试过使用 Map Local,它非常适合此操作,但 Charles 将它自己的 200 OK 状态代码添加到所有返回的文件中。

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

          【讨论】:

          • Marc Liyanage 的答案是新版本 Charles (3.8+) 的正确答案。
          【解决方案6】:

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

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

          例如:

          匹配值:201 .*

          替换值:502 Bad Gateway

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

          【讨论】:

            【解决方案7】:

            更新:Charles Proxy 3.8 版刚刚发布,具有重写状态的能力。来自release notes

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

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

            【讨论】:

            • 完美运行。谢谢
            • 在我的 Charles (3.10.1) 版本中,我必须同时输入状态码和消息才能使重写工作。为了使上面的示例正常工作,我必须将“500”替换为“500 Error”。
            • @marc 是否可以在禁用之前始终使用自定义数据重写 API?
            • @NevinMadhukarK 我不确定你到底在问什么,但如果是关于重写响应有效负载,那也应该是可能的,但与这个问题无关。也许为此启动一个新的问题线程。
            猜你喜欢
            • 2020-04-25
            • 2020-12-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-08-14
            • 2017-06-20
            相关资源
            最近更新 更多