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

47

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

我已安装Fiddler 2(Web调试代理),我相信有一种方法可以使用此应用程序修改响应,但我正在努力找到如何做到这一点。这将是最方便的方法,因为它将允许我保持客户端和服务器代码不变。

有人能帮忙吗?我想拦截从服务器发送到客户端的HTTP响应并在到达客户端之前修改状态代码。

任何建议都将不胜感激。


感谢EricLaw提供的链接。我之前在工作时曾访问过那个页面,但当时无法观看视频。现在在家里,我能够观看这些视频,并发现它们非常有用。Fiddler确实是一个功能强大的工具! - w5m
另请参见https://dev59.com/SXI-5IYBdhLWcg3wR2Nr#1935570。 - Ohad Schneider
1
@EricLaw:更新后的链接可能是:http://www.telerik.com/videos/fiddler/tag/tips-tricks - Sergey
3个回答

78

好的,我假设你已经能够监控客户端/服务器流量。你想要做的是在响应上设置一个断点,然后在将其发送到客户端之前对其进行修改。

以下是几种不同的方法:

  1. 规则 > 自动断点 > 响应后
  2. 在快速执行框(底部的黑色框)中键入“bpafter yourpage.svc”。现在Fiddler将在所有包含“yourpage.svc”的URL的请求之前停止在断点处。键入没有参数的“bpafter”以清除断点。
  3. 使用FiddlerScript编写程序来篡改响应。有关FiddlerScript的最佳文档在官方网站上: http://www.fiddler2.com/Fiddler/dev/

一旦你在断点处停止了响应,只需双击即可在检查器中打开它。现在你有几个选项:

  1. 就在绿色的“运行到完成”按钮旁边(点击该按钮可以发送响应),有一个下拉菜单,可以选择一些默认响应类型。
  2. 或者,在头检查器中,在顶部的文本框中更改响应代码和消息。
  3. 或者,点击“原始”检查器,混淆原始响应以执行任意操作。这也是了解客户端在收到格式错误的响应时所做的事情的好方法,你可能会无意中测试它 :)

1
太棒了 - 这正是我想要的。非常感谢,chrisbro! - w5m
有没有办法让Fiddler自动选择最新的断点请求?我已经设置好了所有的过滤器,所以我只会收到我感兴趣的内容,并且由于我的工作流程,我每次只会得到一个请求。 - WORMSS

14

另一种选择是使用Fiddler的自动响应器选项卡(在右侧面板上)。这样可以捕获与某个字符串匹配的任何URI请求,并从文件中提供“预置”的响应。该文件可以包含标头和负载。此方法的优点是您无需编写FiddlerScript,也无需通过断点手动处理每个请求。

您可以像下面所示在Fiddler中设置规则(确保启用未匹配请求经过,否则所有其他http请求都将失败)。

Fiddler自动响应器设置在此示例中,任何包含“fooBar”的URI请求都将得到预制响应。文件的格式将根据您的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中的字符数匹配,否则Web应用程序将挂起。您的情况可能会有所不同。


1
值得注意的是,您可以限制自动回复规则,使其仅对某些HTTP方法触发。例如:为了返回POST的预设响应,但让PATCH不受影响,上述规则将如下所示:“METHOD:POST fooBar”。 - russthegibbon

2

创建一个 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";
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接