Fiddler 是目前最强大最好用的 Web 调试工具之一,它能记录全部客户端和服务器的http和https请求, 容许你监视,设置 CGI 请求的断点,甚至修改输入输出数据。同类的工具还有httpwatch,firebug,wireshark,google审查元素。与这些基于网页浏览 器的工具不一样,fiddler是一个富客户端桌面工具,不只能监听浏览器对网页的请求和对浏览器的响应(http和https请求), 并且能够监听其余程序(好比java桌面应用)的http请求(固然须要额外的设置,在此不赘述)。另外,值得一提的是,即使在浏览器的调试中,它也能胜 任其余工具,好比IE浏览器,当咱们须要弹出一个模式对话框(modalDialog)时,这些浏览器监听插件就派不上用场了,还得fiddler出场。html
fiddler 和常见的底层抓包(网卡) 工具不同(如 wincap、wireshark),它是在 web server 和 web browser 之间搭了一层 proxy,全部的请求都会通过它,以下图所示前端
fiddler在客户浏览器及web服务器之间充当了一个请求及响应的代理角色,它会在本地创建一个默认代理服务,端口为8888,为此咱们访问一下此端口,可见以下效果:java
第一种:打开Fiddler 点击Rules-> Automatic Breakpoint ->Before Requests(这种方法会中断全部的会话)
如何消除命令呢? 点击Rules-> Automatic Breakpoint ->Disabled
第二种: 在命令行中输入命令: bpu www.baidu.com (这种方法只会中断www.baidu.com)
如何消除命令呢? 在命令行中输入命令 bpuweb
第一种:打开Fiddler 点击Rules-> Automatic Breakpoint ->After Response (这种方法会中断全部的会话)
如何消除命令呢? 点击Rules-> Automatic Breakpoint ->Disabled
第二种: 在命令行中输入命令: bpafter www.baidu.com (这种方法只会中断www.baidu.com)
如何消除命令呢? 在命令行中输入命令 bpafter,正则表达式
建立重定向规则,例如将目标请求是这个js的HTTP请求重定向到本地文件chrome
请参考阿里 UED 的这篇:使用Fiddler提升前端工做效率 (实例篇)浏览器
假设咱们发现这个页面有问题,须要修改所引用的js文件(http://www.aliued.cn/wp-includes/js/comment-reply.js?ver=20090102)。缓存
tip: 最好是没有缓存的返回内容(Result Code是200),这样能够进行下一步的保存。不是200也不要紧,你只要本地硬盘上有这个文件就行了。服务器
在这个js session上右键点击,选择“Save – Response –Response Body…”,将js文件的内容保存到本地。记住存的位置,下面咱们会用到这个保存下来的文件。网络
打开AutoResponder标签设置。有没有看到界面上有两个复选框?第一个的做用是开启或禁用自动重定向功能,咱们就能够在下面添加剧定向规则了。第二个复选框框勾上时,不影响那些没知足咱们处理条件的请求。
咱们能够经过“Add…”按钮手动添加规则,不过这个URL已经出如今咱们的session列表中,能够直接拖动过来。在左侧的Session列表中选择第一步找到的session,拖动到AutoResponse标签中。这样就建立了一个针对这个URL的规则。
Fiddler帮咱们生成的规则是:
咱们须要修改这个规则,
选择“Find a file…”,就能够选择本地的文件做为返回的body内容。
选择咱们刚刚保存下来的文件。
刷新一下浏览器页面,看一下session列表,若是像下面这样,这个session的底色是灰色的,那么恭喜你,你已经成功将这个请求重定向到本地文件了!
tip: 若是浏览器用的是Firefox,记得先清一下临时文件缓存,由于Firefox是真正的缓存,当判断文件的缓存还未过时时,就不会再发请求出来,Fiddler就获取不到了。
咱们在本地的js文件中加一句alert(‘hello’)
刷新浏览器,看看效果,若是alert出来,那就成功了。
继续修改这个文件并测试,成功修复问题后,咱们就能够发布修改后的文件了。
小结:自动重定向功能是Fiddler最实用的功能,这里的Rule能够自由地设定,可使用搜索(默认)、精确匹配(EXACT)、正则表达式匹配(REGEX)。处理方式能够选择使用文件,也能够选择合适的时间暂停数据流(*bpu、*bpafter),人工干预。经过以上几个步骤,咱们演示了怎样将HTTP请求重定向到本地的文件,进行web调试。这种调试方式不须要发布到线上再验证,避免了修改不成功、对用户形成影响的风险,并且不须要搭建复杂的开发服务器等开发环境,很是适合快速web调试。
延伸阅读:
好比你可能在debug某些网页时,会遇到上百个请求,看的你眼花缭乱,这是你能够启用 fiddler 强大的过滤机制:
http://my.oschina.net/leejun2005/blog/65259
http://vdisk.weibo.com/s/CcitC7ClCn_vr
http://www.slideshare.net/bencalie/fiddler-7859272
http://fiddler2.com/blog/blog/2013/07/15/understanding-fiddlerscript
http://fiddler2.com/documentation/KnowledgeBase/Filters
能够看上图的蓝色方框就是自定义列
http://fiddler2.com/documentation/KnowledgeBase/FiddlerScript/AddColumns
fiddler安装以后,默认会在IE浏览器中安装一个fiddler的插件,因此它对IE及国内基于IE内核的各种浏览器都能实现监听,但其余内核的浏览器没法被监听。
解决办法:禁用chrome和firefox中具备代理 功能的插件,好比个人chrome安装了switchSharp,禁用它或选择“使用系统代理设置”,或在switchSharp中新配置一个代理项(比 如名为fiddler,用于指向代理127.0.0.1,端口8888,以下图),便可实现监听。
使用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
具体请参考:http://www.ichatter.cn/2013/06/19/666/
http://www.cnblogs.com/tt-0411/archive/2012/03/18/2404355.html
http://stackoverflow.com/questions/8549749/how-to-capture-https-with-fiddler-in-java
为何想来总结一下呢,是由于最近有个测试需 求,须要检测某个网页指定的 url 请求个数,测试的同窗还为此专门用 JPCAP 开发了一个系统来监听指定的网卡,抓包、解包,分析请求的数据包,而后得出指定 url 的个数。感受这个有点大材小用了,呵呵。由于这个 fiddler 就已经能够搞定了,而后 ctrl - a、ctrl - c 便可知足需求了,只是没有彻底自动化而已,呵呵。
最后题外话一下有关 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欺骗”技术。具体请参考:
http://fulong258.blog.163.com/blog/static/17895044200801145924745/