FiddlerScript学习笔记

embedded/2025/3/14 7:51:34/

参考官方文档: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: 	zhangsanFiddlerObject.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):	trueFiddlerObject.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 proxyoSession["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字段中的主机名。

http://www.ppmy.cn/embedded/172444.html

相关文章

Doris 数据划分:分区与分桶策略全解析

在 Doris 的分布式架构里&#xff0c;数据划分策略是实现高效存储和查询的关键所在。它主要依靠分区&#xff08;Partition&#xff09;和分桶&#xff08;Bucket&#xff09;这两层逻辑划分&#xff0c;对数据的分布进行精细化管理。本文将深入探讨这两种策略的设计思路、实际…

4-002:如何使用 MySQL 的 EXPLAIN 语句进行查询分析?

EXPLAIN 是 MySQL 中用于分析查询性能的工具&#xff0c;能够帮助你理解查询的执行计划。通过 EXPLAIN&#xff0c;你可以查看 MySQL 如何执行查询&#xff0c;包括使用的索引、表连接顺序等信息。 基本用法 在查询前加上 EXPLAIN 即可&#xff1a; EXPLAIN SELECT * FROM y…

在 Linux 64 位系统上安装 Oracle 11g R2 数据库的完整指南

linux.x64_11gR2_database 是 Oracle 数据库 11g 第 2 版&#xff08;11g Release 2&#xff09;的安装包&#xff0c;适用于 64 位 Linux 操作系统。这个安装包包含了在 64 位 Linux 系统上安装 Oracle 数据库所需的全部文件和组件。 安装步骤概述 以下是在 Linux 系统上安装…

c语言闯算法--常用技巧

双指针 类别&#xff1a; 同向快慢指针 异常情况&#xff0c;慢指针才动 双向指针 视情况&#xff0c;左右指针动 最长无重复子串 int max(int a, int b){if(a < b){return b;}else{return a;} } int lengthOfLongestSubstring(char* s) {int count[300];for(int i 0; i …

红帆 iOffice M2 移动端密码爆破的渗透测试思路,绕过客户端实现Burpsuite批量跑,分享渗透思路,共建网络安全

一、本文概述 今天来自于领导的一个需求,需要对甲方的红帆 ioffice M2进行一次渗透测试【有授权书的】,拿到对应的APP和接口以后,我发现了进行不下去的一个关键点,他家的OA只有APP端,没有Web端,而且密码被加密了。 二、开始分析 红帆 iOffice M2,在登录的过程中,涉及…

自定义日志回调函数实现第三方库日志集成:从理论到实战

一、应用场景与痛点分析 在开发过程中&#xff0c;我们经常会遇到以下场景&#xff1a; 日志格式统一&#xff1a;第三方库使用自己的日志格式&#xff0c;导致系统日志混杂&#xff0c;难以统一管理和分析。日志分级过滤&#xff1a;需要动态调整第三方库的日志输出级别&…

完全二叉树节点的数量 平衡二叉树

1.给出一个完全二叉树&#xff0c;求出该树的节点个数 #include <bits/stdc.h> using namespace std; struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int x) { valx; leftNULL; rightNULL; } …

无人机快速发展,无人机反制如何应对?

无人机&#xff0c;即无人驾驶飞机&#xff0c;是一种不搭载驾驶员、依靠遥控或预设程序自主飞行的航空器。随着技术的不断进步和应用领域的不断拓展&#xff0c;无人机已经在军事、民用、商业等多个领域展现出巨大的潜力和价值。 无人机反制是指采取一系列措施来防范、干扰、…