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的操作(暂停、清除sessiondecode模式、清楚缓存等)。

3、Web Session面板:主要是Fiddler抓取到的每条http请求(每一条称为一个session),主要包含了请求的url、协议、状态码、body等信息,详细字段含义如下:

4、详情和数据统计面板。针对每条http请求的具体统计Statistics(例如发送/接收字节数、发送/接收时间,还有粗略统计各地访问服务器所花费的时间)和数据包分析,如: 

1inspector面板下,提供headers\textview\hexview\Raw等多种方式查看单条http的请求报文的信息:

 

2Composer面板下,则可以模拟向相应的服务器发送数据。

 

也可以粘贴一次请求的raw http headers达到模拟的请求。

(3)Filters标签则可以设置Fiddler的过滤规则,来达到过滤http请求的目的。最简单如:过滤内网http请求而只抓取internet的http请求,或则过滤相应域名的http请求。Fiddler的过滤器非常强大,可以过滤特定http状态码的请求,可以过滤特定请求类型的http请求(如css请求,image请求,js请求等),可以过滤请求报文大于或则小于指定大小(byte)的请求。

 

四、使用Fiddler抓包分析

1、Fiddler抓取Http请求。

抓包是Fiddler的最基本的应用,启动Fiddler后,在浏览器中随便进入一个网站,回车后,在FiddlerWeb 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-MatchETag一起工作,工作原理是在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:客户端请求成功

400Bad Request 客户端请求有语法错误,不能被服务器所理解

401Unauthorized 请求未经授权,这个状态吗必须和WWW-Authenticate报头域一起使用

403Forbidden 服务器收到请求,但是拒绝提供服务

404Not Found 请求资源不存在,如输入了错误的URL

500Internal Server Error 服务器发生不可预期的错误

502Server 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提供了两种设置断点的方式达到上述功能:

1Fiddler菜单栏 -> 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到本地文件:

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

请参考阿里 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详解  

0 0