随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

转自:https://my.oschina.net/leejun2005/blog/151103

1、原理简介:

Fiddler 是目前最强大最好用的 Web 调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置 CGI 请求的断点,甚至修改输入输出数据。同类的工具还有httpwatch,firebug,wireshark,google审查元素。与这些基于网页浏览器的工具不同,fiddler是一个富客户端桌面工具,不仅能监听浏览器对网页的请求和对浏览器的响应(http和https请求),而且可以监听其他程序(比如java桌面应用)的http请求(当然需要额外的设置,在此不赘述)。另外,值得一提的是,即便在浏览器的调试中,它也能胜任其他工具,比如IE浏览器,当我们需要弹出一个模式对话框(modalDialog)时,这些浏览器监听插件就派不上用场了,还得fiddler出场。如果你还未曾听说过这个工具,请先阅读这篇科普文:《WEB 调试利器:Fiddler 教程》

fiddler 和常见的底层抓包(网卡) 工具不一样(如 wincap、wireshark),它是在 web server 和 web browser 之间搭了一层 proxy,所有的请求都会经过它,如下图所示:

fiddler在客户浏览器及web服务器之间充当了一个请求及响应的代理角色,它会在本地建立一个默认代理服务,端口为8888,为此我们访问一下此端口,可见如下效果:

2、一些常用技巧介绍:

(1)Fiddler中设置断点修改Request

第一种:打开Fiddler 点击Rules-> Automatic Breakpoint  ->Before Requests(这种方法会中断所有的会话)
如何消除命令呢?  点击Rules-> Automatic Breakpoint  ->Disabled
第二种:  在命令行中输入命令:  bpu www.baidu.com   (这种方法只会中断www.baidu.com)
如何消除命令呢?  在命令行中输入命令 bpu

(2)Fiddler中设置断点修改Response

第一种:打开Fiddler 点击Rules-> Automatic Breakpoint  ->After Response  (这种方法会中断所有的会话)
如何消除命令呢?  点击Rules-> Automatic Breakpoint  ->Disabled
第二种:  在命令行中输入命令:  bpafter www.baidu.com   (这种方法只会中断www.baidu.com)
如何消除命令呢?  在命令行中输入命令 bpafter,

(3)自动重定向 AutoResponder 到本地文件

创建重定向规则,例如将目标请求是这个js的HTTP请求重定向到本地文件

请参考阿里 UED 的这篇:使用Fiddler提高前端工作效率 (实例篇)

http://www.aliued.cn/2010/04/25/use-fiddler-to-improve-efficiency-of-front-development-example.html

(4)过滤会话 session list filter:

比如你可能在debug某些网页时,会遇到上百个请求,看的你眼花缭乱,这是你可以启用 fiddler 强大的过滤机制,还可以依据正则来过滤,

如: REGEX:(empty.js.gif|__utm.gif) ,

具体你可以参考:

Filters | Fiddler Classic,

例如:

(5)请求构建器(Request Builder)、对两个数据流进行比较

(6)文本编码和解码:开启Tools -> Text Encode/Decode

(7)模拟user-agent:Rules->Customize Rules、模拟慢速网络

(8)fiddler 打印 cgi log:

http://my.oschina.net/leejun2005/blog/65259

(9)fiddler-使用技巧:

Sina Visitor System

Sina Visitor System

(10)FiddlerScript:

Understanding FiddlerScript

(11)Filters Reference:

Filters | Fiddler Classic

(12)自定义列:Add Columns to the Web Sessions List:

可以看上图的蓝色方框就是自定义列

Add Columns to Web Sessions List | Fiddler Classic

举个栗子:

在 rule规则脚本的 static function Main() 函数中添加 3 列:远程ip、referer、ReturnedCookie


// The Main() function runs everytime your FiddlerScript compiles
static function Main() {var today: Date = new Date();FiddlerObject.StatusText = " CustomRules.js was loaded at: " + today;FiddlerObject.UI.lvSessions.AddBoundColumn("remoteIP", 200, "X-HOSTIP");FiddlerObject.UI.lvSessions.AddBoundColumn("Referer", 200, "@request.Referer");FiddlerObject.UI.lvSessions.AddBoundColumn("ReturnedCookie", 200, "@response.Set-Cookie");// Uncomment to add a "Server" column containing the response "Server" header, if present// UI.lvSessions.AddBoundColumn("Server", 50, "@response.server");// Uncomment to add a global hotkey (Win+G) that invokes the ExecAction method below...// UI.RegisterCustomHotkey(HotkeyModifiers.Windows, Keys.G, "screenshot");
}

(13)常用fiddler命令:

选择类:?text、>size、<size、=status、@host、 
blod text、select、allbut、keeponly 
断点类:bpafter、bps、bpv、bpm、bpu 
控制类:hide、start、stop、show、quit

其他:cls/clear、dump、g/go、help、urlreplace

例如:?text 高亮选中会话后,shift + delete 即可反选删除,这样就过滤除了你要的 session 请求。

QuickExec Reference | Fiddler Classic

3、注意的问题及解决方法

(1)chrome和firefox浏览器无法被监听

fiddler安装之后,默认会在IE浏览器中安装一个fiddler的插件,所以它对IE及国内基于IE内核的各类浏览器都能实现监听,但其他内核的浏览器无法被监听。 
解决办法:禁用chrome和firefox中具有代理功能的插件,比如我的chrome安装了switchSharp,禁用它或选择“使用系统代理设置”,或在switchSharp中新配置一个代理项(比如名为fiddler,用于指向代理127.0.0.1,端口8888,如下图),即可实现监听。

(2)无法代理本地web服务器的访问请求

使用fiddler的时候,我们更多的是基于本地程序的调试,可惜fiddler捕捉不了本地(localhost或127.0.0.1)的http请求。难道fiddler就束手无策了吗?当然不是。 
一般我们访问安装在本地的服务器程序时,使用的localhost或127.0.0.1,默认会绕过代理,直接访问目标服务器,通过fiddler特有的请求方式,可以使本地请求及响应都被fiddler拦截。

方法一:在localhost后增加.fiddler
比如请求http://localhost:8080改为http://localhost.fiddler:8080即可
方法二:更简单,在localhost或127.0.0.1后增加一个点即可
比如http://localhost.:8080

具体请参考:伧理片午夜伧理片无码,《熟妇的荡欲》在线观看,欧美人与动牲交zooz,日产2021乱码一区

(3)Fiddler不能监听Java HttpURLConnection请求,请看:

解决Fiddler不能监听Java HttpURLConnection请求的方法 - tt-0411 - 博客园

eclipse - how to Capture https with fiddler, in java - Stack Overflow

(4)Fiddler 不能监听、捕获 python urllib2 proxy、ProxyHandler 的问题:

In Fiddler2, go to the page Tools->Fiddler Options ...->Connections, remove the trailing semicolon from the value in the "IE should bypass Fiddler for ..." field and restart Fiddler2.

python - Fiddler does not capture my script's requests - Stack Overflow

也就是说,去掉 <-loopback> 后面的那个分号,保存然后重启你的 fiddler 即可。

4、其它

为什么想来总结一下呢,是因为最近有个测试需求,需要检测某个网页指定的 url 请求个数,Fiddler 虽然可以,但是需要人工进行,想了想准备用 JPCAP 然后封装个浏览器内核试试,做成一个自动化的工具。

JPCAP 简介:

众所周知,JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP扩展包弥补了这一点。
  JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。在官方网站上声明,JPCAP支持FreeBSD 3.x, Linux RedHat 6.1, Fedora Core 4, Solaris, and Microsoft Windows 2000/XP等系统。JPCAP的整个结构大体上跟wincap/libpcap是很相像的,例如NetworkInterface类对应wincap的typedef struct _ADAPTERADAPTER,getDeviceList()对应pcap_findalldevs()等等。 使用 JPCAP 实现监听利用的是所谓的“ARP欺骗”技术。具体请参考:

JPCAP的使用 - 【轰隆隆】的日志 - 网易博客

最后谈谈Java里面连接操作系统网络协议栈的API。

下表显示了网络层标准的开放系统互连(OSI)模型。

#

协议

Java SDK的核心APIs

7.

应用层

HTTP、FTP、SSL等

java.net.HttpURLConnection、javax.servlet.HttpServlet

6.

表示层

# 在Java里,OSI应用层和表示层没有真正区别

5.

会话层

NetBios、RCP

# Java SDK核心对OSI会话层没有支持

4.

传输层

TCP、UDP

java.net.Socket、java.net.ServerSocket、java.net.Datagram

3.

网络层

IP

Java.net.InetAddress

2.

数据链路层

PPP

# Java SDK核心对OSI数据链路层没有支持

1.

物理层

以太网、InfiniBand

# Java SDK核心对OSI物理层没有支持

不过……

现在有了Java 7 SDP(VM连接InfiniBand和java.net.*、java.io.*核心APIs的桥梁)

Java 7 SDP:Java套接字直接协议——直接访问OSI第一层物理层,请参考:

http://www.infoq.com/cn/articles/Java-7-Sockets-Direct-Protocol

5、推荐阅读:

(1)基于fiddler来模拟限速

基于fiddler来模拟限速 -- 网络系统 -- IT技术博客大学习 -- 共学习 共进步!

(2)Fiddler (二) Script 用法

http://www.cnblogs.com/tankxiao/archive/2012/04/25/2349049.html

(3)Fiddler的高级用法-Fiddler Script

http://cube.qq.com/?p=973

(4)Fiddler ScriptSamples

Fiddler Web Debugger - Script Samples

(5)fiddlerscript addcolumns

Add Columns to Web Sessions List | Fiddler Classic

关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享相关推荐

  1. [Web开发] Web程序调式的利器 - Fiddler (HTTP协议监视工具)

    在做Web开发的时候,了解你的Web程序和IE如何通讯是非常有用的,尤其是做Web程序的性能优化.Fiddler 就是这么一个HTTP协议调试利器,它由微软IE开发组的一个工程师开发,可以帮助你全面分 ...

  2. Fiddler调试利器

    Web调试-Fiddler调试利器:http://www.imooc.com/video/389 转载于:https://my.oschina.net/xkmy520/blog/1551374

  3. go 切换当前运行目录_go调试利器-delve

    大家好,我是小栈君,好久没更新文章了,确实抱歉!因为工作变动等原因导致最近拖更严重,但是请大家放心,我会一如既往的为大家带来自己的原创文章,供大家相互交流和学习,一起成长.今天小栈君带来的分享是go语 ...

  4. Firebug高级用法 - Web开发的利器

    Firebug是一个Firefox插件,是Web开发的利器.从此处下载.工具用好了能大大提高开发效率.下面介绍一些用法: 查看编辑HTML和CSS,查看DOM 两个方法,一个是在新窗口中打开Fireb ...

  5. 前端开发利器—FIDDLER 转

    http://www.cnblogs.com/yuzhongwusan/archive/2012/07/20/2601306.html 前端开发利器-FIDDLER 1.Fiddler相对其他调试工具 ...

  6. 浏览器F12进行Web程序调试

    转自http://www.cnblogs.com/yougewe/p/5152700.html 引语:如今的整个Web开发行业甚至说整个软件开发行业,已经相当成熟,基本上已经很少找不到没有前人做过的东 ...

  7. Go调试利器-delve

    大家好,我是小栈君,好久没更新文章了,确实抱歉!因为工作变动等原因导致最近拖更严重,但是请大家放心,我会一如既往的为大家带来自己的原创文章,供大家相互交流和学习,一起成长.今天小栈君带来的分享是go语 ...

  8. Windows GUI代码与Windows消息问题调试利器

    Windows GUI代码与Windows消息问题调试利器 记得很久前有这么一种说法: 人类区别于动物的标准就是工具的使用.同样在软件开发这个行业里面,对于工具的使用也是高手和入门级选手的主要区别, ...

  9. web app开发利器 - iscroll4 解决方案

    web app开发利器 - iscroll4 解决方案 参考文章: (1)web app开发利器 - iscroll4 解决方案 (2)https://www.cnblogs.com/aaronjs/ ...

最新文章

  1. Web3.js 0.20.x API 中文版翻译
  2. XenApp_XenDesktop_7.6实战篇之十四:XenDesktop虚拟桌面的交付
  3. python执行速度太慢为什么还_为什么你写的Python运行的那么慢呢?
  4. ​ ​微软Office新增实用功能允许用户在不同设备上轻松送同步字体
  5. Bootstrap 后台模板-AdminLTE
  6. Kotlin-Android-Extensions:不仅仅是替代findViewById
  7. php获取笔顺矢量,php如何获取汉字笔画数功能的实例分析
  8. 带左右箭头图片轮播的JS代码
  9. 楚留香ai人脸识别_《楚留香》评测掌中快意恩仇的世界
  10. 如何理解会议中控系统
  11. mysql查询周数_MySQL如何获取一个指定日期所对应本年度的周数(WEEK函数)呢?
  12. 第一章 会计学总论 详细笔记
  13. tp5实现短信注册,调用第三方接口,电话通知,和短信通知都可以。
  14. vue前端生成词云图的方法
  15. shader graph_Shader Graph中的自定义照明:在2019年扩展图形
  16. 百度地图API——多点路径连线问题
  17. 实验二+163+张玉洁
  18. Panads(四):数据清洗——对缺失值的处理
  19. c# 改键-之魔兽改键(Hook)
  20. C#调用Halcon并输出圆心坐标

热门文章

  1. 用计算机弹歌夜空中最亮的星,计算机弹《夜空中最亮的星》 网友:学会了去撩妹...
  2. XTU Oj 128
  3. 什么是大小端?如何测试某台机器是大端还是小端。
  4. h5 加载完成_开业通知朋友圈怎么写?新店开业宣传H5
  5. 由英雄无敌Online开源 想到的
  6. 评论:雷军再次分享互联网七字诀 称用诺基亚的人out了
  7. 论文查重是怎么查的?有什么规定?
  8. 一道小学数学问题的编程解法
  9. VisionPro 报错解决方法
  10. 你的时间有限,不要为别人而活