Fiddler使用和数据抓包
来源:互联网 发布:人脸变老软件电脑版 编辑:程序博客网 时间:2024/04/30 08:26
一、Fiddler使用说明
1.、Fiddler2 是一个使用本地 127.0.0.1:8888 的 HTTP 代理,任何能够设置 HTTP 代理为 127.0.0.1:8888 的浏览器和应用程序都可以使用 Fiddler。
二、.什么是Fiddler?
Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 。 它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器。
既然是代理,也就是说:客户端的所有请求都要先经过Fiddler,然后转发到相应的服务器,反之,服务器端的所有响应,也都会先经过Fiddler然后发送到客户端,基于这个原因,Fiddler支持所有可以设置http代理为127.0.0.1:8888的浏览器和应用程序。使用了Fiddler之后,web客户端和服务器的请求如下所示:
三、Fiddler使用界面简介
其主界面如下:
1、工具栏: File\ 包括捕获http请求,停止捕获请求,保存http请求,载入本地session\设置捕获规则等功能。
2、菜单栏:Replay~Browse 包括Fiddler针对当前View的操作(暂停、清除session、decode模式、清楚缓存等)。
3、Web Session面板:主要是Fiddler抓取到的每条http请求(每一条称为一个session),主要包含了请求的url、协议、状态码、body等信息,详细字段含义如下:
4、详情和数据统计面板。针对每条http请求的具体统计Statistics(例如发送/接收字节数、发送/接收时间,还有粗略统计各地访问服务器所花费的时间)和数据包分析,如:
(1)inspector面板下,提供headers\textview\hexview\Raw等多种方式查看单条http的请求报文的信息:
(2)Composer面板下,则可以模拟向相应的服务器发送数据。
也可以粘贴一次请求的raw http headers达到模拟的请求。
(3)Filters标签则可以设置Fiddler的过滤规则,来达到过滤http请求的目的。最简单如:过滤内网http请求而只抓取internet的http请求,或则过滤相应域名的http请求。Fiddler的过滤器非常强大,可以过滤特定http状态码的请求,可以过滤特定请求类型的http请求(如css请求,image请求,js请求等),可以过滤请求报文大于或则小于指定大小(byte)的请求。
四、使用Fiddler抓包分析
1、Fiddler抓取Http请求。
抓包是Fiddler的最基本的应用,启动Fiddler后,在浏览器中随便进入一个网站,回车后,在Fiddler的Web Session界面捕获到HTTP请求如下图:
图标的意思:
六、HTTP状态码详解
七、HTTP详解
1、HTTP请求格式
Http通信协议,以“消息头/消息体”的方式分割,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么做。
HTTP协议传输的消息规定,每一个HTTP包都分为HTTP头和HTTP体两部分,消息体是可选的,而消息头是必须的。例如,打开一个网页,“查看源文件”,HTML代码就是HTTP的消息体,消息头则可以通过开发工具或者插件看到。
客户端通过发送HTTP请求向服务器请求对资源的访问。HTTP请求由三部分组成:请求行、请求头和请求正文。
请求行:请求方法URI协议/版本
请求头(Request Header)
请求正文
如下一个HTTP请求的数据:
(1)请求行:请求方法URI 协议/版本
POST /index.php HTTP/1.1 请求方法 URI 协议和协议的版本
URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以 / 开头。
请求方法,HTTP 1.1 中的请求方式:
(2)请求头(Request Header)
每个头域由一个域名,冒号(:)和域值三部分组成。
HTTP常见的请求头如下:
Transport头域
1)Connection:
作用:表示是否需要持久连接
Connection: keep-alive
Connection: close 【 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。】
2)Host:(发送请求时该头域是必须的)
作用:主要用于指定被请求资源的Internate主机和端口号,通常是从HTTP URL中提取出来的;
Client头域
1)Accept:
作用:浏览器可以接受的媒体类型(MIME类型)
Eg:Accept: */* 代表浏览器可以处理所有类型
2)Accept-Encoding:
作用:浏览器申明自己接收的编码方法,通常指定压缩方法,而不是字符编码;
3)Accpet-Language:
作用:浏览器申明自己接收的语言;
4)User-Agent:
作用:告诉HTTP服务器,客户端使用的操作系统和浏览器的名称版本;
5)Accept-Charset:
作用:浏览器申明自己接收的字符集;
Cookie/Login头域
Cookie:
作用:最重要的header,将cookie的值发送给HTTP服务器;
Miscellaneous头域
Referer:
作用:提供了Request的上下文信息的服务器,告诉我服务器我是从哪个链接过来的;
Cache头域
1)If-Modified-Since:
作用: 把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。
例如:If-Modified-Since: Thu, 09 Feb 2012 09:07:57 GMT
2)If-None_match:
作用: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag. 使用这样的机制将提高网站的性能
例如: If-None-Match: "03f2b33c0bfcc1:0"
3)Pragma:
作用:防止页面被缓存,Pargma只有一个用法, 例如: Pragma: no-cache;
4)Cache-Control:
作用:这个是非常重要到的规则,用来指定Response-Request遵循的缓存机制。各个指令含义如下:
Cache-Control: Public 可以被任何缓存所缓存
Cache-Control: Private 内容只缓存到私有缓存中
Cache-Control: no-cache 所有的内容都不会被缓存
Entity头域
1)Content-Length:
作用:发送给HTTP服务器数据的长度,即请求消息正文的长度;
2)Content-Type:
作用:
2、HTTP响应格式
在接收和解释请求消息后,服务器会返回一个HTTP响应消息。与HTTP请求类似,HTTP响应也由三个部分组成,分别是:状态行、消息报头和响应正文。
如下一个HTTP响应例子:
<span style="white-space:pre"></span>HTTP/1.1 200 OK Date: Sun, 17 Mar 2013 08:12:54 GMT Server: Apache/2.2.8 (Win32) PHP/5.2.5 X-Powered-By: PHP/5.2.5 Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Length: 4393 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=utf-8<html> <head> <title>HTTP响应示例<title> </head> <body> Hello HTTP! </body> </html>
1)状态行
状态行由协议版本、数字形式的状态代码以及相应的状态描述组成,各元素之间以空格分隔,结尾时回车换行,如:HTTP/1.1 200 OK 协议版本 服务器返回的响应码 状态代码的文本描述
状态代码与状态描述:
1XX:指示信息——表示请求已经接受,继续处理;
2XX:成功——表示请求已经被成功接收、理解、接受;
3XX:重定向——要完成请求必须进行更进一步的操作;
4XX:客户端错误——请求有语法错误或请求无法实现;
5XX:服务器端错误——服务器未能实现合法的请求。
常用状态码以及状态描述:
200:客户端请求成功
400:Bad Request 客户端请求有语法错误,不能被服务器所理解
401:Unauthorized 请求未经授权,这个状态吗必须和WWW-Authenticate报头域一起使用
403:Forbidden 服务器收到请求,但是拒绝提供服务
404:Not Found 请求资源不存在,如输入了错误的URL
500:Internal Server Error 服务器发生不可预期的错误
502:Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能回复正常
2)响应正文
响应正文就是服务器返回的资源的内容,响应头和正文之间也必须用空行分隔,如:
<html> <head> <title>HTTP响应示例<title> </head> <body> Hello HTTP! </body> </html>
3)响应头信息
HTTP最常见的响应头如下所示:
Cache头域
1)Date:
作用:生成消息的具体时间,即当前的GMT时间;
2)Expires:
作用:浏览器会在指定过期时间内使用本地缓存,指明应该在什么时候认为文档已经过期,从而不再缓存;
3)Vary:
Cookie/Login头域
1)P3P:
作用:用于跨域设置Cookie,这样可以解决iframe跨域访问cookie的问题;
2)Set-Cookie:
作用:非常重要的header,用于把cookie发送到客户端浏览器,每一个写入cookie都会生成一个Set-Cookie.
Entity实体头域
1)ETag:
作用:和If-None_match配合使用;
2)Last-Modified:
作用:用于指示资源的最后修改日期和时间;
3)Content-Type:
作用:WEB服务器告诉浏览器自己响应的对象的类型和字符集;
4)Content-Length:
作用:指明实体正文的长度,以字节方式存储的十进制数字来表示。
5)Content-Encoding:
作用:文档的编码方法,一般是压缩方式。
6)Content-Language:
作用:WEB服务器告诉浏览器自己响应的对象的语言者。
Miscellaneous头域
1)Server:
作用:指明HTTP服务器的软件信息;
2)X-Powered-By:
作用:表示网站是用什么技术开发的。
Transport头域
Connectio:Keep-alive
Location头域
Location: 用于重定向一个新的位置,包含新的URL地址,实例请看304状态实例。
八、Fiddler调试技巧
1、使用Fiddler进行HTTP断点调试,可以做到:
(1)修改HTTP请求头信息,例如修改请求头的UA/Cookie/Referer信息,通过“伪造”相应信息达到相应的目的(调试,模拟用户真实请求等)。
(2)构造请求数据,突破表单的限制,随意提交数据。避免页面js和表单限制影响调试。
(3)拦截响应数据,修改响应实体。
Fiddler提供了两种设置断点的方式达到上述功能:
1、Fiddler菜单栏 -> rules -> automatic Breakpoints -> 选择断点方式,这种方式下设定的断点会对之后的所有HTTP请求有效。有两个断点位置:
(1)before response。也即发送请求后,但是Fiddler代理中转前,这时可以修改请求的数据。【此种调试可以在浏览器发送请求消息到Fiddler代理服务器时,手动修改用户HTTP请求头消息,针对不同的请求数据测试服务器返回的不同响应结果。】
(2)After response。也即服务器响应之后,但是在Fiddler将响应中转给客户端之前,这时可以修改响应的结果。
【为什么说上述方法很重要? 一般的js前端和后台程序员是分工合作的,js程序员想要调试Ajax请求从后台获取数据的功能,这样就不需要等待服务器端程序员开发好所有接口后再开始开发js端的ajax请求功能,因为通过“模拟”真实服务端的响应,便可保证功能的正确性,而后台 开发人员,只要保证最终响应式符合规定的即可。这样大大提高了程序开发的效率,当然也降低的不同业务线程序员联调的难度。】
2、命令行下输入:bpafter host名称 或者bpv bpu bpm 等设置断点。这种断点只针对特定类型的请求。Fiddler中设置断点修改Request,使用命令:bpu www.baidu.com;设置断点修改Response,使用命令:bpafter www.baidu.com。
3、终止断点的方式:
(1)在inspector界面点击“run to complete”即可终止本次HTTP请求的断点。
(2)输入go命令,也会使得当前的请求跳过断点。
(3)在rules -> auto breakpoint 中disabled断点即可。
实例:
1、设置断点,修改响应数据
(1)打开http://www.cnblogs.com/
(2)设置断点 after response断点后,在命令行输入bpafter www.cnblogs.com 回车,再次访问该网站,可以在web-session面板看到请求已经被挂起,如图8-1,而web浏览器也一直处于加载状态,选择被挂起的请求,在inspector面板可以看到图8-2所示:
4、Fiddler常用技巧
(1)Fiddler中设置断点修改Request;
(2)Fiddler中设置断点修改Response;
(3)自动重定向AutoResponder到本地文件:
创建重定向规则,例如将目标请求是这个js的HTTP请求重定向到本地文件。
请参考阿里 UED 的这篇:使用Fiddler提高前端工作效率 (实例篇)
http://www.aliued.cn/2010/04/25/use-fiddler-to-improve-efficiency-of-front-development-example.html 不仅可以替换js文件,还可以替换图片,html等文件。
(4)过滤会话session list filter.
参考:
http://blog.csdn.net/ohmygirl/article/details/17846199 Fiddler详解
http://blog.csdn.net/hguisu/article/details/8683290 HTTP详解
- Fiddler使用和数据抓包
- fiddler抓包数据分析
- Fiddler网络数据抓包
- Fiddler服务器数据抓包
- fiddler,他和其他抓包软件有什么区别,如何使用fiddler进行抓包
- 抓包工具Fiddler的使用(2):Fiddler抓包之后的数据分析
- iOS抓包,使用Fiddler
- 使用Fiddler手机抓包
- Android使用Fiddler抓包
- 手机使用Fiddler抓包
- 使用fiddler手机抓包
- Fiddler抓包使用总结
- Fiddler 抓包软件的安装和使用
- fiddler抓包软件模拟GET和POST的使用
- 使用Fiddler进行http抓包和调试
- Android Fiddler 手机抓包 Http 数据
- 用Fiddler进行APP数据抓包
- 利用Fiddler抓包移动端数据
- 碎碎念_天天更
- MFC控件实例之Slider Control实例
- 【多校】ZZULIOJ 1919 D
- 二分图--最大匹配
- caffe使用draw_net.py网络结构绘制
- Fiddler使用和数据抓包
- 55. Jump Game
- 你们还在为区块链狂热,Gartner已经站出来帮你认清“五大迷思”了
- MySql判断是否为null或空字符串
- Android Studio如何取消与SVN的关联
- Scala和Java的大整数的关系
- 继承与派生,多继承,函数重载,构造函数调用顺序
- HDU 4452 模拟
- 【OK6410裸机程序】DDR始化