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: 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";
请求头
请求头和响应头的方法一致,以下代码中的oRequest与oResponse都可以互换
// 添加、修改请求头
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 | 此标志的值决定了在会话列表中呈现此会话时使用的字体颜色。可以写red、green这些标准颜色 |
| 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字段中的主机名。 |
相关文章:
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 : Obje…...
正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-5.1 uboot顶层Makefile分析-VSCode工程创建
前言: 本文是根据哔哩哔哩网站上“Arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用: …...
Linux内核IPoIB驱动中的RSS队列选择机制分析
摘要 本文深入分析了Linux内核中InfiniBand over Ethernet(IPoIB)驱动程序的发送队列选择函数ipoib_select_queue_sw_rss的实现。该函数通过复杂的条件编译和逻辑分支,实现了基于软件的接收端扩展(RSS)功能,确保网络流量在多队列环境下的高效分发,提升网络性能和吞吐量…...
js数组遍历十种方法
在JavaScript中,数组遍历可以有多种方法。以下列举了10种常用的数组遍历方式: For 循环 let array [1, 2, 3, 4, 5]; for (let i 0; i < array.length; i) {console.log(array[i]); }For-of 循环(ES6) let array [1, 2, 3, …...
OTP单片机调试工具之—单线数据编码
OTP单片机调试工具在实现过程中离不开单线数据的传输,那么使用哪一种方式的数据编码会比较好呢? 我所了解的主要有以下三种: 1.UART(串口),这种方式在单片机和pc之间进行传输都非常常见,效率比较…...
SWPU 2022 新生赛
webdog1__start if (isset($_GET[web])) {$first$_GET[web];if ($firstmd5($first)) md5 自等 web0e215962017 (md5后也是 0e) 登入后得到提示,robots.txt 访问 f14g.php 返回包里发现 hint > if (isset($_GET[get])){$get$_GET[get];if(!strs…...
Java 基础到进阶企业技巧(二)
在 Java 学习的旅程中,我们逐步探索了其丰富的知识体系,从基础的数据类型、字符串操作,到流程控制、运算符的运用,每一步都为我们构建强大的编程能力奠定基石。同时,了解这些知识在 Java 全栈开发中的应用场景…...
【后端】【django】【related_name】`related_name` 的作用
related_name 的作用 related_name 用于 Django 的 ForeignKey 和 OneToOneField,用于 反向访问 关联模型的数据。 默认情况下,Django 会自动生成一个反向关系的名字,但如果多个外键指向同一个模型,就可能发生命名冲突。related…...
Deepseek-R1大模型微调实战技术深度解析
一、Deepseek-R1架构特性与微调适配性分析 1.1 核心架构创新对微调的影响 Deepseek-R1基于Deepseek-V3-Base架构,通过MoE(Mixture-of-Experts)与MLA(Multi-Head Latent Attention)的协同设计,实现了参数规模与计算效率的平衡。其6710亿参数总量中,每个token仅激活37B参…...
Google最新生图模型Gemini-2.0-Flash-Exp免费用
Google发布新生图模型 Google释放出最新生图模型,在发布说明中提到: 2025年3月12日 在 Gemini-2.0-Flash-Exp 中发布原生图像输出功能 Gemini 2.0 Flash Experimental 模型发布,支持原生图像输出功能。开发者能够使用 Gemini 进行图像输出和…...
leecode695.岛屿的最大面积
跟求岛屿数量的题目差不多,依旧是深度搜索或者广度搜索问题 class Solution { private:int maxAreaOfIsland(vector<vector<int>>& grid,vector<vector<bool>>& visited,int x,int y){if(x<0||x>grid.size()||y<0||y>…...
助力字体管理,规避设计卡顿的得力工具
在设计领域,字体看似平常,却常常在关键时刻“掉链子”,让设计师们头疼不已。面对海量字体库,找到心仪那款宛如大海捞针,字体安装过多还会造成软件卡顿,这些麻烦事儿,频繁与字体打交道的朋友肯定…...
零基础上手Python数据分析 (4):Python数据结构精讲 - 列表、元组、字典、集合
写在前面 回顾一下,在之前的博客中,我们学习了 Python 的基本数据类型(数值、字符串、布尔值)和核心语法(运算符、变量、流程控制、函数、模块)。 现在,我们已经掌握了 Python 编程的基础知识。 接下来,我们将进入数据分析的关键环节: 数据组织。 在数据分析中,数据…...
数统院复试来啦,西电数学与统计学院—考研录取情况
4西安电子科技大学—数学与统计学院—考研录取统计 01、数学与统计学院各个方向 02、24数学与统计学院近三年复试分数线对比 数统院24年院线相对于23年院线增加高达30分,确实增长浮动比较高,接近30分的水平,因此大家更需要好好去努力…...
Windows功能之FTP服务器搭建
一、创作背景 之前有用linux系统搭建过ftp服务器,最近想着用windows系统也顺便搭建一个,看网上有第三方服务软件一键部署,记得windows可以不借助第三方软件就可以搭建,就想顺便操作试试,结果老是连接不上,费…...
leetcode hot100普通动态规划/基础DP
1️⃣1️⃣ 普通动态规划(基础 DP) 70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 题解: 动态规划Dynamic Programming ,在观察动态中找到如何规划解题的步骤…...
基于Python的天气预报数据可视化分析系统-Flask+html
开发语言:Python框架:flaskPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统登录 可视化界面 天气地图 天气分析 历史天气 用户管理 摘要 本文介绍了基于大数据…...
【鸿蒙开发】Hi3861学习笔记-Visual Studio Code安装(New)
00. 目录 文章目录 00. 目录01. Visual Studio Code概述02. Visual Studio Code下载03. Visual Studio Code安装04. Visual Studio Code插件05. 附录 01. Visual Studio Code概述 vscode是一种简化且高效的代码编辑器,同时支持诸如调试,任务执行和版本管…...
git报错:“fatal:refusing to merge unrelated histories“
新建仓库,克隆本地项目到新仓库,首次同步本地已提交的代码到远程时,报错:"fatal:refusing to merge unrelated histories" 。 报错意思是:致命的:拒绝合并无关的历史。 一、问题背景ÿ…...
前端面试笔试
前端面试笔试 1 相对路径和绝对路径的区别 区别:他们描述文件或目录位置的方式不同 绝对路径:绝对路径是指从系统的根目录开始的完整路径,无论当前工作目录在哪个位置,绝对路径始终指向文件或目录的确切位置。绝对路径适用…...
目前人工智能的发展,判断10年、20年后的人工智能发展的主要方向,或者带动的主要产业
根据2025年的最新行业研究和技术演进趋势,结合历史发展轨迹,未来10-20年人工智能发展的主要方向及带动的产业将呈现以下六大核心趋势: 一、算力革命与底层架构优化 核心地位:算力将成为类似“新能源电池”的基础设施,…...
Redis基本命令手册——五大类型
目录 一:基本操作 二:字符串(String) 三:哈希(Hash) 四:列表(List) 五:集合(Set) 六:有序集合(Zset&…...
历年华中科技大学计算机考研复试上机真题
历年华中科技大学计算机考研复试上机真题 2022华中科技大学计算机考研复试上机真题 2021华中科技大学计算机考研复试上机真题 2019华中科技大学计算机考研复试上机真题 在线评测:https://pgcode.cn 八进制 题目描述 输入一个整数,将其转换成八进制数…...
Python----数据分析(Pandas二:一维数组Series,Series的创建,Series的属性,Series中元素的索引与访问)
一、一维数组Series Series:一维数组,与Numpy中的一维array类似。它是一种类似于一维数组的对象,是由一组数据(各种 NumPy 数据类型)以及一组与之相关的数据标签(即索引)组成。 仅由一组数据也可产生简单的 Series 对象,用值列表生成 Series …...
java数据结构(复杂度)
一.时间复杂度和空间复杂度 1.时间复杂度 衡量一个程序好坏的标准,除了能处理各种异常,还有就是时间效率,当然,对于一些配置好的电脑数据处理起来就是比配置低的高,但从后期发展来看,当数据量足够庞大时&…...
windows协议不再续签,华为再无windows可用,将于四月发布鸿蒙PC
大家好,我是国货系创始人张云泽,最近不少小伙伴在后台问:“听说Windows协议要到期了?我的电脑会不会变砖?”还有人说:“华为笔记本以后用不了Windows了?鸿蒙系统能用吗?”今天咱们就…...
HTML+CSS基础(了解水平)
html 的介绍 学习目标 能够知道html的作用 1. html的定义 2. html的定义 HTML 的全称为:HyperText Mark-up Language, 指的是超文本标记语言。 标记:就是标签, <标签名称> </标签名称>, 比如: <html></html>、<h1><…...
[设计模式]1_设计模式概览
摘要:设计模式原则、设计模式的划分与简要概括,怎么使用重构获得设计模式并改善代码的坏味道。 本篇作概览与检索用,后续结合源码进行具体模式深入学习。 目录 1、设计模式原理 核心原则(语言无关) 本质原理图 原…...
ClickHouse总体学习
文章目录 一、简介1、OLAP 与 OLTP 的对比2、列式储存的好处3、DBMS 的功能4、多样化引擎5、高吞吐写入能力6、数据分区与线程级并行 二、Explain 查看执行计划三、建表优化1、数据类型2、分区和索引3、表参数4、写入和删除优化 四、常见配置CPU资源内存资源存储 五、ClickHous…...
Elasticsearch集群与日志系统实战部署指南
一、环境规划与初始化配置 1. 服务器资源分配 IP地址部署服务主机名172.25.23.7ES Kafka Zookeeper Kibananode1172.25.23.8ES Kafka Zookeeper Filebeatnode2172.25.23.9Kafka Zookeeper Apache Logstashnode3 系统要求: 配置:4核CPU / 4G…...
