0%

关于fiddlerscript编写问题

关于fiddlerscript暂时没在官方找到一个正常的文档,只知道是基于jscript .net的,并且在论坛看到一些使用例子。这里对目前知道的一些东西做一个整理。

关于fiddlerscript

打开fiddlerscript后右边点击可以看到当前的fiddlerscript,这个团队给其做了一个小型编辑器,实际是位于C:\Users\username\Documents\Fiddler2\Scripts文件夹下的CustomRules.js文件。

整个fiddlerscript位于一个Handles类中,fiddler在运行时会解析执行这个类中的回调函数,这些回调函数类似于在一个请求回复过程中的各个阶段做了hook,以此实现对请求与响应包在各个阶段时的修改,类似于chrome插件中通过addListener在各个阶段进行插桩处理。具体的不同阶段可以在上方Go to栏查看,总共大概有9个,其中比较常用的就是onBeforeRequestonBeforeResponse两个,分别是在发送请求前和将响应包交给网页前。一般通过在onBeforeRequest中加入代码对请求参数进行处理,在onBeforeResponse中加入代码处理相应参数。

相关语法与代码

fiddlerscript的语法基本和javascript差不太多,但是由于没有给出各种API的文档,无从知晓各种信息的类型与处理函数,这里也只是记录一下我遇到的,并且在网上查到的一些函数用法,仅供参考。

对某个url的请求下断点或做标记

1
2
3
4
5
if(oSession.uriContains("example.com")){
oSession.oFlags['x-breakrequest'] = "xyz";//这里xyz可以是任意字符串,只是这个断点的名字而已
oSession["ui-color"]= "red";
FiddlerApplication.Log.LogString("log info");//打印日志
}

以字符串方式获取请求的内容,以及一些处理操作

1
2
3
4
5
var obody = oSession.GetRequestBodyString();
var arr = obody.split("=");
arr[1] = "zzzz";
obody = arr.join("=");
oSession.utilSetRequestBody(obody);

获取响应内容并修改等

1
2
3
var obody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);//获取响应内容
//modify response
oSession.utilSetRequestBody(obody);

请求头信息处理

1
2
3
var cookie_str = oSession.oRequest.headers["cookie"];
oSession.oRequest.headers.Remove("xxxx");//移除header的xxxx字段
oSession.oRequest.headers.Add("xxxx","yyyy");//给请求头添加xxxx字段,这个只是单纯的添加,添加多个相同字段在header中也会出现多个

处理json格式响应

1
2
3
4
5
6
7
var obody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
var jsn = Fiddler.WebFormats.JSON.JsonDecode(obody);
//通过jsn.JSONObject使用此json对象
var len = jsn.JSONObject.Count();//元素个数
jsn.JSONObject.Remove(jsn.JSONObject[key]);//删除某个元素
var new_body = Fiddler.WebFormats.JSON.JsonEncode(jsn.JSONObject);//编码形成新的json
oSession.utilSetResponseBody(new_body);//构造新的响应包

构建新请求并发送

1
2
3
4
5
6
7
8
9
10
11
12
13
//主要是请求头部分
//如一个POST https://example.com/a/b的请求
var url = "/a/b"
var xxx_str = "xxxx: yyyy";
var ttt_str = "ttt: ppp";
var head_key:String[] = [xxx_str,ttt_str];//设置头部字段
var new_head = new HTTPRequestHeaders(url,head_key);//构建头部结构体
new_head.UriScheme = "https";
new_head.HTTPMethod = "POST";
new_head.HTTPVERSION = "HTTP/1.1";
var osd = new System.Collections.Specialized.StringDictionary();
var new_session = FiddlerApplication.oProxy.SendRequestAndWait(new_head,new_body,osd,null);//发送请求