我需要测试一些客户端应用程序代码,以测试其处理来自Web服务器的HTTP响应中返回的各种状态代码的能力。
我已安装Fiddler 2(Web调试代理),我相信有一种方法可以使用此应用程序修改响应,但我正在努力找到如何做到这一点。这将是最方便的方法,因为它将允许我保持客户端和服务器代码不变。
有人能帮忙吗?我想拦截从服务器发送到客户端的HTTP响应并在到达客户端之前修改状态代码。
任何建议都将不胜感激。
我需要测试一些客户端应用程序代码,以测试其处理来自Web服务器的HTTP响应中返回的各种状态代码的能力。
我已安装Fiddler 2(Web调试代理),我相信有一种方法可以使用此应用程序修改响应,但我正在努力找到如何做到这一点。这将是最方便的方法,因为它将允许我保持客户端和服务器代码不变。
有人能帮忙吗?我想拦截从服务器发送到客户端的HTTP响应并在到达客户端之前修改状态代码。
任何建议都将不胜感激。
好的,我假设你已经能够监控客户端/服务器流量。你想要做的是在响应上设置一个断点,然后在将其发送到客户端之前对其进行修改。
以下是几种不同的方法:
一旦你在断点处停止了响应,只需双击即可在检查器中打开它。现在你有几个选项:
另一种选择是使用Fiddler的自动响应器选项卡(在右侧面板上)。这样可以捕获与某个字符串匹配的任何URI请求,并从文件中提供“预置”的响应。该文件可以包含标头和负载。此方法的优点是您无需编写FiddlerScript,也无需通过断点手动处理每个请求。
您可以像下面所示在Fiddler中设置规则(确保启用未匹配请求经过,否则所有其他http请求都将失败)。
在此示例中,任何包含“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应用程序将挂起。您的情况可能会有所不同。
创建一个 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";
}
}