如何使用Fiddler修改HTTP响应中的状态代码?

时间:2011-05-10 15:33:36

标签: http fiddler httpresponse http-status-codes

我需要测试一些我编写的客户端应用程序代码,以测试它对来自Web服务器的HTTP响应中返回的各种状态代码的处理。

我安装了Fiddler 2(Web调试代理),我相信有一种方法可以使用这个应用程序修改响应,但我很难找到方法。这将是最方便的方式,因为它允许我保持客户端和服务器代码不被修改。

任何人都可以协助,因为我想拦截从服务器发送到客户端的HTTP响应,并在到达客户端之前修改状态代码吗?

非常感谢任何建议。

3 个答案:

答案 0 :(得分:71)

好的,所以我假设您已经能够监控您的客户端/服务器流量。您要做的是在响应上设置一个断点,然后在将其发送到客户端之前摆弄它。

以下是一些不同的方法:

  1. 规则>自动断点>回应后
  2. 在quickexec框(底部的黑框)中输入“bpafter yourpage.svc”。现在,Fiddler将在对包含“yourpage.svc”的任何URL的所有请求之前停在断点处。键入“bpafter”,不带参数以清除断点。
  3. 使用FiddlerScript以编程方式篡改响应。 FiddlerScript的最佳文档位于官方网站:http://www.fiddler2.com/Fiddler/dev/
  4. 在断点处停止响应后,只需双击它即可在检查员中打开它。你现在有几个选择:

    1. 在绿色“运行至完成”按钮(您单击以发送响应)旁边,有一个下拉列表,可让您选择一些默认响应类型。
    2. 或者,在Headers检查器上,更改响应代码&顶部文本框中的消息。
    3. 或者,单击“原始”检查器并弄乱原始响应以对其执行任意操作。同样是一个很好的方法来查看客户端在收到格式错误的响应时所做的事情,您可能会意外地进行测试:)

答案 1 :(得分:7)

另一种选择是使用Fiddler的 AutoResponder 标签(在右侧面板上)。这允许您捕获对与字符串匹配的任何URI的请求,并从文件中提供“预制”响应。该文件可以包含标头和有效负载。这种方法的优点是您不必编写FiddlerScript,也不必通过断点手动处理每个请求。

您可以在Fiddler中设置规则,如下所示(确保启用不匹配的请求直通,否则所有其他http请求都将失败)。

Fiddler autoresponder setup 在此示例中,任何URI包含“fooBar”的请求都将获得预设响应。文件的格式将根据您的API而有所不同(您可以使用浏览器截取“真实”响应并以此为基础)但我的看法如下:

HTTP/1.1 409 Conflict
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, DELETE, PUT, PATCH, OPTIONS
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization
Access-Control-Max-Age: 86400
Content-Type: application/vnd.api+json
Content-Length: 149
Date: Tue, 28 Mar 2017 10:03:29 GMT

{"errors":[{"code":"OutOfStock","detail":"Item not in stock","source":{"lineId":{"type":"Order line Number","id":"1"}},"meta":{"availableStock":0}}]}

我发现它需要在最后一行末尾(即json之后)回车,并且Content-Length头必须与json中的字符数相匹配,否则webapp会挂起。您的里程可能会有所不同。

答案 2 :(得分:0)

创建FiddlerScript规则。以下是我为了生成网站的本地副本而使用的内容,该网站在每个页面上故意使用403以阻止HTTrack / WGET。 https://gist.github.com/JamoCA/22db8d68a9a2fb20cb04a85360185333

/* 20180615 Fiddler rule to ignore all 403 HTTP Status errors so WGET or HTTrack can generate local copy of remote website */
   SCENARIO: Changing the user agent or setting a delay isn't enough and the entire remote server is configured to respond w/403.
   CONFIGURE: Add below rule to FiddlerScript OnBeforeReponse() section.  Configure HTTrack/WGET/CRON to use proxy 127.0.0.01:8888 */

static function OnBeforeResponse(oSession: Session) {
  if (oSession.HostnameIs("TARGETHOSTNAME_FILTER.com") && oSession.responseCode == 403) {
    oSession.responseCode = 200;
    oSession.oResponse.headers.HTTPResponseCode = 200;
    oSession.oResponse.headers.HTTPResponseStatus = "200 OK";
  }
}