提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Fiddler 是一款免费且功能强大的数据包抓取软件。它通过代理的方式获取程序 HTTP 通讯的数据,可以用其检测网页和服务器的交互情况,能够记录所有客户端和服务器间的 HTTP 请求,支持监视、设置断点,甚至修改输入输出数据等功能。Fiddler 包含了一个强大的基于事件脚本的子系统,并且能够使用 .NET 框架语言扩展。
优点:就是操作简单便捷,易于理解
缺点:是只能抓取到 HTTP 的相关信息
Fiddler 是以代理 Web 服务器的形式工作的,启动 Fiddler 本机浏览器会自动设置代理服务器,关闭 Fiddler 代理服务器自动关闭,Fiddler 启到的是中转站的作用实现抓包效果,如果 Fiddler 非正常关闭,可能网页无法访问网络,可手动关闭浏览器的代理服务器。
如果要抓取不可信的 HTTPS 请求把下面截图的选框也勾选上:
Tools → Options ... → HTTPS → Ignore server certifivate errors(unsafe)
Tools → Options ... → Connections → Allow remote computers to connect
3. HTTPS 设置处,点击 Actions → Trust Root Certificate
4.红框内显示的是证书名称,点击是进行安装
设置断点的第一种方式:通过菜单栏 Rules → Automatic Breakpoints
Before Requests :拦截所有发送给服务器的请求
After Responses:拦截所有服务器返回的 session
Disabled :取消断点
设置断点的第二种方式:通过命令行中断请求:bpu [接口地址]
中断响应:bpafter [接口地址]
中断该响应状态的会话:bps [状态码]
中断 HTTP 方法的会话:bpv [post/get等] 和 bpm [post/get等]
注:接口地址可以是专门抓取一个指定接口,也可以指定拦截的服务器。
暂停所有post请求(断下后可以修改post的数据)
if (oSession.HTTPMethodIs("POST") && (oSession.utilFindInRequest("thekeyword", true) > -1)){
oSession["x-breakrequest"] = "keyword";
}
暂停所有包含指定关键字的post请求
if (oSession.HTTPMethodIs("POST") && (oSession.utilFindInRequest("thekeyword", true) > -1)){
oSession["x-breakrequest"] = "keyword";
}
暂停url中请求类型是xml的请求
if (oSession.url.toLowerCase().indexOf(".xml")>-1){
oSession["x-breakrequest"]="reason_XML";
}
在OnBeforeRequest 这个函数里添加下面代码,里面主机名改成你的就可以(把请求发送给服务器之前调用)
static function OnBeforeRequest(oSession: Session) {
//添加颜色
if (oSession.HostnameIs("www.zdcxx.com")) {
oSession["ui-color"] = "red";
}
//把指定主机重定向到另一个主机,并且把请求url给替换下
if (oSession.HostnameIs("s33211.xxxx.cn")||oSession.HostnameIs("s33211.xxxx.cn")) {
oSession.hostname="test.xxxxx.cn";
oSession.url = oSession.url.Replace("/static/study_h5","");
oSession.url = oSession.url.Replace("/static/common/js","");
}
}
修改cookie,header头信息
cookie是请求头里的一个字段,并不是像我们写程序设置cookies时的一个键对应一个值,直接就是一个cookies的字符串,因此我们可以把cookie清除掉重新添加
static function OnBeforeRequest(oSession: Session) {
// 删除所有的cookie
oSession.oRequest.headers.Remove("Cookie");
// 新建新的cookie
oSession.oRequest.headers.Add("Cookie", "uuid=asdfasdfasdf;key=asdfasdf");
//修改来源地址
if (oSession.uriContains("www.xxxx.com")) {
oSession.oRequest["Referer"] = "www.xxxx.com"
}
//添加随机值强制刷新缓存
if (oSession.uriContains("s29.9956.cn/static/study_h5")) {
oSession.url = oSession.url+ "?"+ Math.random()*1000000;
}
}
修改post时的body里面的值(注意里面的值是&分隔的键值参数字符串)
static function OnBeforeRequest(oSession: Session) {
//第一种修改方法,取出来再修改
// 获取Request 中的body字符串
var strBody=oSession.GetRequestBodyAsString();
// 用正则表达式或者replace方法去修改string
strBody=strBody.replace("4444","6666");
// 弹个对话框检查下修改后的body
FiddlerObject.alert(strBody);
// 将修改后的body,重新写回Request中
oSession.utilSetRequestBody(strBody);
//第二种方法直接替换
oSession.utilReplaceInRequest("4444", "6666");
}
禁止css请求
if (oSession.uriContains(".css")){
oSession["ui-color"]="orange";
oSession["ui-bold"]="true";
oSession.oRequest.FailSession(404, "Blocked", "Fiddler blocked CSS file");
}
修改json类型
oSession.utilDecodeResponse();
var str=oSession.GetResponseBodyAsString();
//替换内容
str=str.Replace("msg","message");
// 转成json对象修改内容
var json=Fiddler.WebFormats.JSON.JsonDecode(str);
json.JSONObject["code"]="200";
json.JSONObject["data"]["message"]="200";
oSession.utilSetResponseBody(Fiddler.WebFormats.JSON.JsonEncode(json.JSONObject));
暂停响应头是javascript类型的请求(一般用在修改响应数据的时候)
if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "javascript")){
oSession["x-breakresponse"]="reason is JScript";
}
与开发本地调试,把请求从HTTPS改成HTTP
if (oSession.isHTTPS && oSession.HostnameIs("test.com")) {
oSession.oRequest.headers.UriScheme = "http";
}