在 Fiddler 的 onBeforeRequest 或 onBeforeResponse 函数中使用 FiddlerScript
编写规则
可以自定义修改 web 请求或响应。使用哪个函数更合适取决于你在编码中需要使用的对象:OnBeforeRequest 会在每个请求前被调用,OnBeforeResponse 会在每个响应前被调用。注意:
没办法在 OnBeforeRequest 内使用 response 类对象,因为它们还没被创建。
可以在 OnBeforeResponse 内使用 request 类对象;然而,所有对它们的修改对 server 来说都是不可见的,因为在这之前 server 已经收到了请求。
添加请求头:
oSession.oRequest["NewHeaderName"] = "New header value";
复制代码
删除响应头:
oSession.oResponse.headers.Remove("Set-Cookie");
复制代码
改变一个页面请求到同一服务器的另外一个页面:
if (oSession.PathAndQuery=="/version1.css") {
oSession.PathAndQuery="/version2.css"
复制代码
将一个服务器的所有请求指向到另一服务器的相同端口:
if (oSession.HostnameIs("www.bayden.com")) {
oSession.hostname="test.bayden.com"
复制代码
将一个服务器的所有请求指向到两一个服务器的不同端口:
if (oSession.host=="www.bayden.com:8080") {
oSession.host="test.bayden.com:9090"
复制代码
将一个服务器的所有请求指向到另一个服务器,包括 HTTPS tunnels:
// 重定向浏览,包括 HTTPS tunnels
if (oSession.HTTPMethodIs("CONNECT") && (oSession.PathAndQuery == "www.example.com:443")) {
oSession.PathAndQuery = "beta.example.com:443"
if (oSession.HostnameIs("www.example.com")) oSession.hostname = "beta.example.com"
复制代码
模仿 Windows 的 HOSTS 文件,修改一个 Hostname 的指向到其它 IP 地址。(无需更改 Host 请求头实现修改访问目标):
if (oSession.HostnameIs("subdomain.example.com")){
oSession.bypassGateway = true;
oSession["x-overrideHost"] = "128.123.133.123";
复制代码
修改一个页面的请求指向到另一个页面,甚至指向到另一个服务器上的页面。(通过修改 Host 请求头实现):
if (oSession.url=="www.example.com/live.js") {
oSession.url = "dev.example.com/workinprogress.js"
复制代码
阻止上传 HTTP Cookies:
oSession.oRequest.headers.Remove("Cookie");
复制代码
解压并拆包一个 HTTP 响应,按需更新响应头:
oSession.utilDecodeResponse();
复制代码
搜索并替换 HTML:
if (oSession.HostnameIs("www.bayden.com") && oSession.oResponse.headers.ExistsAndContains("Content-Type","text/html")){
oSession.utilDecodeResponse();
oSession.utilReplaceInResponse('<b>','<u>');
复制代码
忽略大小写搜索响应中的 HTML:
if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "text/html") && oSession.utilFindInResponse("searchfor", false)>-1){
oSession["ui-color"] = "red";
复制代码
删除所有 DIV 标签(包括标签内的内容):
// 如果响应头 content-type 为 HTML,删除所有 DIV 标签
if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "html")){
// 取消压缩和打包
oSession.utilDecodeResponse();
var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
// 替换所有 DIV 标签为空字符串
var oRegEx = /<div[^>]*>(.*?)<\/div>/gi;
oBody = oBody.replace(oRegEx, "");
// 设置响应体内容为去掉 DIV 后的内容
oSession.utilSetResponseBody(oBody);
复制代码
将你的浏览器伪装成 Google 爬虫:
oSession.oRequest["User-Agent"]="Googlebot/2.X (+http:
复制代码
请求获得希伯来语(犹太人民族的语言以色列国通用语言)的内容:
oSession.oRequest["Accept-Language"]="he";
复制代码
阻止 .CSS 请求:
if (oSession.uriContains(".css")){
oSession["ui-color"]="orange";
oSession["ui-bold"]="true";
oSession.oRequest.FailSession(404, "Blocked", "Fiddler blocked CSS file");
复制代码
伪造一个 HTTP Basic 验证(需要用户输入密码后才能显示内容):
if ((oSession.HostnameIs("www.example.com")) &&
!oSession.oRequest.headers.Exists("Authorization"))
// 为了阻止 IE 出现 “友好的错误信息” 而隐藏掉我们的错误信息,需要使响应体的长度大于 512 字符。
var oBody = "<html><body>[Fiddler] Authentication Required.<BR>".PadRight(512, ' ') + "</body></html>"
oSession.utilSetResponseBody(oBody)
// 构建响应头
oSession.oResponse.headers.HTTPResponseCode = 401
oSession.oResponse.headers.HTTPResponseStatus = "401 Auth Required"
oSession.oResponse["WWW-Authenticate"] = "Basic realm=\"Fiddler (just hit Ok)\""
oResponse.headers.Add("Content-Type", "text/html")
复制代码
修改一个请求的响应为从本地 \Captures\Responses 文件夹加载的文件(可以用于 OnBeforeRequest 或 OnBeforeResponse 函数中):
if (oSession.PathAndQuery=="/version1.css") {
oSession["x-replywithfile"] ="version2.css"
第一次翻译,有错望指出。