FiddlerScript学习笔记

参考官方文档:https://www.fiddlerbook.com/fiddler/dev/scriptsamples.asp

json

// 反序列化
static function jsonDecode(str : String){
  return Fiddler.WebFormats.JSON.JsonDecode(str).JSONObject;
}
// 序列化
static function jsonEncode(jsonObject : Object) {
  return Fiddler.WebFormats.JSON.JsonEncode(jsonObject);
}

使用

// 反序列化
var job = jsonDecode('{"name":"zhangsan"}');
// 修改、增加属性
job["age"] = 18;
// 序列化
var jsonString = jsonEncode(job);

FiddlerObject.log("job.name: \t" + job["name"]);
// 输出 job.name: 	zhangsan

FiddlerObject.log("new json info: \t" + jsonString);
// 输出 new json info: 	{"age":18, "name":"zhangsan"}

发请求

发post请求,下面代码是用文心一言生成的

static function doPostData(reqUrl:String,reqBody:String, callback: Function){
    //把响应的json内容通过http发送其它地方
    var _xhr = new ActiveXObject('Microsoft.XMLHTTP');
    var url = reqUrl;
    // 这里处理回调事件
    _xhr.onreadystatechange = function() {
            if (_xhr.readyState === 4) {
                if (_xhr.status === 200) {
                    callback(_xhr.responseText);
                } else {
                    callback(new Error("Request failed with status " + _xhr.status));
                }
            }}
    _xhr.open('POST', url, true);
    _xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    _xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    _xhr.send(reqBody);
}

路径检查

如果要判断请求路径中有没有指定字符,可以使用uriContains方法,不区分大小写,而且是拿完整路径来判断的。如果需要区分大小写可以使用fullUrl.Contains方法

FiddlerObject.log(oSession.fullUrl);
// 输出 http://localhost:8888/userInfo?type=user
FiddlerObject.log('uriContains(type):\t'+oSession.uriContains('type'));
// 输出 uriContains(type):	true
FiddlerObject.log('uriContains(userinfo):\t'+oSession.uriContains('userinfo'));
// 输出 uriContains(userinfo):	true
FiddlerObject.log('uriContains(localhost):\t'+oSession.uriContains('localhost'));
// 输出 uriContains(localhost):	true
FiddlerObject.log('uriContains(LOCALHOST):\t'+oSession.uriContains('LOCALHOST'));
// 输出 uriContains(LOCALHOST):	true

FiddlerObject.log('fullUrl.Contains(userinfo):\t'+oSession.fullUrl.Contains("userinfo"));
// 输出 fullUrl.Contains(userinfo):	false
FiddlerObject.log('fullUrl.Contains(userInfo):\t'+oSession.fullUrl.Contains("userInfo"));
// 输出 fullUrl.Contains(userInfo):	true
FiddlerObject.log('fullUrl.Contains(localhost):\t'+oSession.fullUrl.Contains("localhost"));
// 输出 fullUrl.Contains(localhost):	true
FiddlerObject.log('fullUrl.Contains(LOCALHOST):\t'+oSession.fullUrl.Contains("LOCALHOST"));
// 输出 fullUrl.Contains(LOCALHOST):	false

路径和查询参数

FiddlerObject.log(oSession.fullUrl);
// 输出 http://localhost:8888/userInfo?type=user&format=json
FiddlerObject.log("host:\t"+oSession.host);
// 输出 host:	localhost:8888
FiddlerObject.log("hostname:\t"+oSession.hostname);
// 输出 hostname:	localhost

// 修改
oSession.host="test.bayden.com:9090";
oSession.hostname="test.bayden.com";


FiddlerObject.log('PathAndQuery:\t'+oSession.PathAndQuery);
// 输出 PathAndQuery:	/userInfo?type=user&format=json

// 修改路径和查询参数
oSession.PathAndQuery="/version2.css";

请求头

请求头和响应头的方法一致,以下代码中的oRequestoResponse都可以互换

// 添加、修改请求头
oSession.oRequest["NewHeaderName"] = "New header value";
oSession.oRequest.headers.Add("Content-Type", "text/html");

// 获得请求头,下面两种方法都可以,键值不区分大小写
oSession.oRequest['cookie'];
oSession.oRequest.headers['Cookie'];

// 删除请求头
oSession.oRequest.headers.Remove("Cookie");

// 是否存在指定请求头
oSession.oRequest.headers.Exists("Cookie")
// 是否存在指定请求头,且值包含
oSession.oResponse.headers.ExistsAndContains("Content-Type", "image/")
// 是否存在指定请求头,且值相等
oSession.oRequest.headers.ExistsAndContains("Content-Type", "application/json;charset=utf-8")

解压缩

如果发现拿到的请求体或响应体是gzip压缩后的,可以使用以下方法解压缩

//对请求数据解码
oSession.utilDecodeRequest();
//对返回数据解码
oSession.utilDecodeResponse()

请求体

获取与生效

// 确定请求体编码格式
FiddlerObject.log("encoding:\t"+oSession.GetRequestBodyEncoding());
// encoding:	System.Text.UTF8Encoding

// 获取,下面两种方法都可以
var oBodyString = System.Text.Encoding.UTF8.GetString(oSession.requestBodyBytes);
// 应该是默认使用utf-8解码
var oRequestBody = oSession.GetRequestBodyAsString()

// 生效修改后的请求体
oSession.utilSetRequestBody(oRequestBody);

检查与修改

// 查询请求体中是否包含指定字符,不存在返回-1。第二个参数表示是否区分大小写,false为不区分
oSession.utilFindInRequest("document.cookie", false);
// 在请求体中替换内容
oSession.utilReplaceInRequest('<b>','<u>');

响应体

获取和生效的方法与请求体的方法类似

// 确定请求体编码格式
FiddlerObject.log("encoding:\t"+oSession.GetResponseBodyEncoding());
// encoding:	System.Text.UTF8Encoding

// 获取,下面两种方法都可以
var oBodyString = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
// 应该是默认使用utf-8解码
var oResBody = oSession.GetResponseBodyAsString();

// 生效修改后的请求体
oSession.utilSetResponseBody(oResBody);

模拟DNS解析

如果请求地址中主机部分使用的是域名,则可以模拟修改windows中的hosts文件的效果

// 这样所有对域名subdomain.example.com的请求,都会被转发到128.123.123.123这个主机上
if (oSession.HostnameIs("subdomain.example.com")){
	oSession.bypassGateway = true;                   // Prevent this request from going through an upstream proxy
	oSession["x-overrideHost"] = "128.123.133.123";  // DNS name or IP address of target server
}

控制当前请求在Fiddler界面列表中的展示效果

以下是将第二列的英文翻译成中文后的Markdown格式表格:

Flag Name含义
ui-hide从会话列表中隐藏会话,就是不会显示在列表中,但请求仍会被fiddler代理,会直接放行。会话将继续运行。隐藏会话上的断点将被忽略。注意:隐藏会话将释放原本用于在内存中保存会话数据的内存。
ui-color此标志的值决定了在会话列表中呈现此会话时使用的字体颜色。可以写redgreen这些标准颜色
ui-backcolor此标志的值决定了在会话列表中此会话条目使用的背景颜色。
ui-bold设置为true时,此会话的条目在会话列表中将加粗显示。
ui-italic设置为true时,此会话的条目在会话列表中将斜体显示。
ui-strikethrough设置为true时,此会话的条目在会话列表中将加删除线显示。
ui-customcolumn此标志的值显示在Fiddler会话列表的“用户定义”列中。
ui-breakrequest如果存在,将在发出请求之前暂停此会话的执行。暂停后就可以修改请求体等信息,然后再放行
ui-breakresponse如果存在,将在收到响应后暂停此会话的执行。暂停后就可以修改响应内容
ui-comments用户为此会话设置的注释(如果有)。
x-overrideHost提供用于DNS解析目的的Host:Port组合。请注意,此机制不会更改请求上的HOST头,因此如果存在上游网关,则此机制无效。
x-overrideGateway提供应用于代理此请求的网关的Host:Port组合,或直接发送到原始服务器的DIRECT。
x-serversocket只读。包含有关服务器套接字重用状态的字符串。
x-securepipe只读。包含有关安全服务器套接字重用状态的字符串。
x-no-decrypt如果设置在CONNECT隧道上,则隧道中的流量将不会被解密。需要Fiddler v2.0.8.9或更高版本。
https-Client-Certificate应附加到此安全请求的客户端证书(例如.CER)的文件名。需要Fiddler v2.1.0.3或更高版本。
x-SuppressProxySupportHeader阻止Fiddler向请求HTTP/401或HTTP/407响应中添加“Proxy-Support: Session-Based-Authentication”头,这些响应请求Negotiate或NTLM身份验证。需要Fiddler v2.1.4.2或更高版本。
x-ProcessInfo有关本地请求来源的信息(模块名称和进程ID)。就是在Fiddler界面中,列表的Process那一列显示的内容。需要Fiddler v2.1.4.1或更高版本。
x-clientIP只读。指示发送此请求的客户端IP。当网络上的多台计算机指向单个Fiddler实例时,此功能特别有用。
x-clientport只读。指示发送此请求的客户端上的端口。
x-hostIP只读。指示用于此请求的服务器的IP地址。
x-TTFB已弃用。使用oSession.Timer代替。到响应的第一个字节的时间(以毫秒为单位)。
x-TTLB已弃用。使用oSession.Timer代替。到响应的最后一个字节的时间(以毫秒为单位)。
request-trickle-delay延迟每个出站请求数据千字节的毫秒数。
response-trickle-delay延迟每个入站响应数据千字节的毫秒数。
x-HTTPProtocol-Violation包含在处理此会话时遇到的HTTP协议违规的数据。
x-replywithfile此标志的值是Captures/Responses文件夹中(或完全限定的文件名)的文件名,该文件包含要返回给客户端的HTTP响应,而不是将请求发送到服务器。
x-repliedwithfile只读。包含x-replywithfile中指定的文件名,在自动响应加载后。
log-drop-request-body在将请求发送到服务器后,从会话列表中删除请求正文。对于最小化内存使用很有用。
log-drop-response-body在将响应发送到客户端后,从会话列表中删除响应正文。对于最小化内存使用很有用。
x-OverrideCertCN指定应出现在此CONNECT隧道的Fiddler生成证书的CN字段中的主机名。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水晶心泉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值