https://www.cnblogs.com/miantest/p/7289694.htmlhtml
Fiddler基础知识前端
· Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工做的,使用的代理地址是:127.0.0.1,端口默认为8888,咱们也能够经过设置进行修改。ios
· 代理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代理服务器会将数据包进行拦截,代理服务器再冒充客户端发送数据到服务器;同理,服务器将响应数据返回,代理服务器也会将数据拦截,再返回给客户端。web
· Fiddler能够抓取支持http代理的任意程序的数据包,若是要抓取https会话,要先安装证书。正则表达式
HTTP协议chrome
· 要分析Fiddler抓取的数据包,咱们首先要熟悉HTTP协议。HTTP即超文本传输协议,是一个基于请求与响应模式的、无状态的、应用层的协议,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。json
· HTTP的工做过程:当咱们请求一个超连接时,HTTP就开始工做了,客户端先发送一个请求到服务器,请求内容包括:协议版本号、请求地址、请求方式、请求头和请求参数;服务器收到请求后作相应的处理,并将响应数据返回到客户端,响应内容包括:协议版本号、状态码和响应数据。前端根据响应数据作相应的处理,就是最终咱们看到的内容。这些过程是HTTP自动完成的,咱们只是输入或点击请求地址,而后查看前端给咱们展现的内容。更多关于HTTP协议的介绍请参考:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html浏览器
· 请求方式经常使用的有:GET、PUT、POST、DELETE。缓存
· HTTP状态码主要分为5类:以1开头的表明请求已被接受,须要继续处理;以2开头的表明请求已成功被服务器接收、理解、并接受;以3开头的表明须要客户端采起进一步的操做才能完成请求;以4开头的表明了客户端看起来可能发生了错误,妨碍了服务器的处理;以5开头的表明了服务器在处理请求的过程当中有错误或者异常状态发生,也有多是服务器意识到以当前的软硬件资源没法完成对请求的处理。
· 常见的主要有:200:服务器成功处理了请求;404:未找到资源;500:内部服务器错误;503:服务器目前没法为请求提供服务;302:请求的URL已临时转移;304:客户端的缓存资源是最新的,要客户端使用缓存。
· 每一个状态码的详细介绍请参考:https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin
Fiddler的使用
· Fiddler是一个很好用的抓包工具,能够将网络传输发送与接收的数据包进行截获、重发、编辑等操做。也能够用来检测流量。
· Fiddler安装后,设置的端口默认为8888,当Fiddler启动后,默认将IE的代理设为了127.0.0.1:8888,而其余如火狐浏览器须要手动设置代理后才能够抓包。设置内容如图:
·
1)要使用Fiddler进行抓包,首先须要确保Capture Traffic是开启的(安装后是默认开启的),勾选File->Capture Traffic,也能够直接点击Fiddler界面左下角的图标开启和关闭抓包。
2)因此基本上不须要作什么配置,安装后就能够进行抓包了。那么咱们怎么分析抓到的这些数据包呢?如图所示的区域为数据包列表,要分析这些数据包,首先要了解各字段的含义。
#:顺序号,按照抓包的顺序从1递增
Result:HTTP状态码
Protocol:请求使用的协议,如HTTP/HTTPS/FTP等
HOST:请求地址的主机名或域名
URL:请求资源的位置
Body:请求大小
Caching:请求的缓存过时时间或者缓存控制值
Content-Type:请求响应的类型
Process:发送此请求的进程ID
Comments:备注
Custom:自定义值
3)每一个Fiddler抓取到的数据包都会在该列表中展现,点击具体的一条数据包能够在右侧菜单点击Insepector查看详细内容。主要分为请求(即客户端发出的数据)和响应(服务器返回的数据)两部分。
4)HTTP Request Header:以百度为例,查看请求百度主页这条数据包的请求数据,从上面的Headers中能够看到以下内容:
请求方式:GET
协议: HTTP/1.1
Client 头域:
Accept: text/html, application/xhtml+xml, image/jxr, */* ---------浏览器端能够接受的媒体类型
Accept-Encoding: gzip, deflate ---------压缩方法
Accept-Language: zh-CN ---------语言类型
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393 ---------客户端使用的操做系统和浏览器的名称和版本
COOKIE头域:将cookie值发送给服务器
Transport 头域:
Connection:当网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP链接是否关闭。keep-alive表示不会关闭,客户端再次访问这个服务器上的网页,会继续使用这一条已经创建的链接;close表示关闭,客户端再次访问这个服务器上的网页,须要从新创建链接。
HOST:主机名或域名,若没有指定端口,表示使用默认端口80.
5)HTTP Response Header:继续以百度为例,如图所示:
协议:HTTP/1.1
状态码:200
Cache头域:
Cache-Control: private ---------此响应消息不能被共享缓存处理,对于其余用户的请求无效
Date: Sat, 05 Aug 2017 04:37:43 GMT ---------生成消息的具体时间和日期
Expires: Sat, 05 Aug 2017 04:37:42 GMT ---------浏览器会在指定过时时间内使用本地缓存
Cookie/Login 头域:
Set-Cookie: BDSVRTM=264; path=/ ---------把cookie发送到客户端
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=1425_21097_22157; path=/; domain=.baidu.com
Entity头域
Content-Length: 202740 ---------正文长度
Content-Type: text/html;charset=utf-8 ---------告知客户端服务器自己响应的对象的类型和字符集
Miscellaneous 头域:
Bdpagetype: 2
Bdqid: 0x99791efd00036253
Bduserid: 2577220064
Server: BWS/1.1 ---------指明HTTP服务器的软件信息
X-Ua-Compatible: IE=Edge,chrome=1
Security头域:
Strict-Transport-Security: max-age=172800 ---------基于安全考虑而须要发送的参数,关于这个参数的解释,请参考:http://www.freebuf.com/articles/web/66827.html
Transport头域:
Connection: Keep-Alive
6)TextView:显示请求或响应的数据。
7)WebForms:请求部分以表单形式显示全部的请求参数和参数值;响应部分与TextView内容是同样的。
8)Auth:显示认证信息,如Authorization
9)Cookies:显示全部cookies
10)Raw:显示Headers和Body数据
11)JSON:若请求或响应数据是json格式,以json形式显示请求或响应内容
12)XML:若请求或响应数据是xml格式,以xml形式显示请求或响应内容
13)上面是以百度主页为例,百度主页采用的是GET请求,在TextView中没有请求body,咱们再以无忧行网站登陆接口为例,它是一个POST请求,除了请求头外,在TextView中多了请求数据。这也是GET请求和POST请求的一个区别。GET请求是将请求参数放在url中,而POST请求通常是将请求参数放在请求body中。
总结:经过Fiddler能够抓取请求和响应参数,经过对参数进行分析,能够定位是前端仍是后台问题。例如咱们在测试登陆接口时,输入了正确的手机号和密码,但前端提示“请输入正确的用户名和密码”;仅仅经过界面提示咱们只能描述bug表象,但不能分析出问题缘由。假设经过抓包咱们发现是因为前端参数名错误或参数值为空,从而致使后台报错。这个时候咱们将bug指向前端开发人员,并将参数数据和接口文档中对应的报文数据做为附件上传,是否是能够提升bug的解决效率呢?Fiddler在实际的功能测试中有很大的做用,一方面帮助咱们更好的了解某个业务中客户端和服务器端是经过哪些接口进行请求的,从而更好的了解代码逻辑;另外一方面,咱们还能够经过响应数据判断哪里出现了问题,例如可能服务器程序挂了,致使前端报“服务器故障”,这时咱们经过抓包发现响应数据返回502,这时咱们能够手动去重启服务或是联系运维重启服务,从而提升问题的解决效率。
在上一篇中介绍了Fiddler的基本使用方法。经过上一篇的操做咱们能够直接抓取浏览器的数据包。但在APP测试中,咱们须要抓取手机APP上的数据包,应该怎么操做呢?
Andriod配置方法:
1)确保手机和Fiddler所在主机在同一个局域网中
2)获取Fiddler所在主机的ip地址,经过cmd命令进入命令编辑器,输入ipconfig -all,找到IPv4地址,记下该地址
3)对手机所链接的无线网络进行设置,点击WLAN,长按与Fiddler所在主机在同一个局域网的wifi,长按点击【修改网络】,选中【显示高级选项】,代理设置为手动,输入代理服务器的主机名和端口后保存。代理服务器的主机名即2)中的IPv4地址,端口为Fiddler上配置的端口(默认为8888),能够到Fiddler菜单栏中【Tool】-【Fiddler Option】的【Connections】中查看。
4)在手机浏览器上输入:http://IPv4地址:端口(例如:http://192.168.11.29:8888),点击【FiddlerRoot certificate】下载安装Fiddler证书。
5)若在浏览器上没法打开该地址,须要作两项检查:1、确保在浏览器、wifi中配置的代理与Fiddler所在主机地址和Fiddler中配置的端口,三者保持一致;2、确保在Fiddler-【Tools】-【Fiddler Option]-[Connection]中【Allow remote computers to connect】已经勾选上,若没有勾选,则须要勾选后保存并重启Fiddler。
6)这时咱们打开手机上的浏览器或APP,能够在Fiddler上看到手机上的数据包了。
IOS配置方法:
1)基本与andriod的配置方法一致,除了安装证书方式与andriod略有不一样,另外ios在下载证书后,须要手动信任证书。设置方法:打开【设置】-【通用】-【关于本机】-【证书信任证书】,找到对应的证书,启用便可。
HTTPS抓包
上面都是针对HTTP协议进行抓包的设置,那么HTTPS须要进行什么配置呢?
1)打开Fiddler-【Tools】-【Fiddler Option】,切换到HTTPS选项卡,勾选【Capture HTTPS CONNECTs】和【Decrypt HTTPS traffic】,而后点击【Actions】-【Trust Root Certificate】,而后按照提示一路yes,直到弹框提示“Trust Cert success”点击肯定后,重启Fiddler就能够抓取HTTPS协议的数据包了。
Fiddler过滤会话
咱们在使用Fiddler进行抓包时,发现只要是使用了Fiddler代理服务器的全部HTTP/HTTPS数据包都会在Fiddler数据列表中显示出来,但有时咱们只关注从某个或某些服务器发出的请求,不想要看到其余服务器的数据包,应该怎么进行设置呢?咱们都知道Fiddler是一款强大的抓包工具,咱们能够经过设置来过滤只筛选出咱们想要的数据包。
1)在右侧菜单中,找到Fittlers选项,共有9个部分进行设置
2)Use Filters:勾选则表示使用过滤,不勾选则表示不进行过滤
3)Actions:有四个选项,Run Filterset now:当即运行过滤设置;Load Filterset:加载保存的过滤设置;Save Filterset:保存过滤设置;help:帮助
4)Hosts:该设置项有两个选项
· 第一个下拉框是只显示内网或者外网选项
·
· 第二个下拉框是根据主机名信息显示或者隐藏或者标记指定请求
·
5)Client Process:有三个选项,Show only traffic from:根据进程信息进行过滤,选择后,将只显示由该进程发出的请求;Show only Internet Explorer traffic:只关心由IE浏览器发出的请求;Hide traffic from Service Host:隐藏来自service host(即由svchost.exe进程发出)的请求
6)Request Headers:有五个选项,Show only if URL contains:能够经过正则表达式过滤请求地址中包含或不包含的内容,例如REGEX:\.(js|css|js\?.*|css\?.*)$(隐藏全部js和css请求);Hide if URL contains:与Show only if URL contains相反,一个是显示,一个是隐藏;Flags requests with headers:支持指定某个http请求头名称,若是在web session列表中存在该请求头,会加粗显示该session;Delete requests headers:与Flags requests with headers相似,这里是若是包含该请求头,则删除该请求头;Set request header:将HTTP请求头更新为所输入的值。
7)Breakpoints:断点设置,有四个选项。Break request on POST:对POST请求设置断点;Break request on GET with query string:会为全部方法为GET且URL中包含了给定查询条件的请求设置断点;Break on XMLHttpRequest:对全部可以肯定是经过XMLHTTPRequest对象发送的请求设置断点;Break response on Content-Type:会为全部响应头Content-Type中包含了指定文本的响应设置响应断点。
8)Response Status Code:根据响应状态码设置断点。
9)Response Type and Size:有几种类型,一类是根据响应数据的类型显示或隐藏;一类是根据响应数据的大小显示或隐藏;一类是根据响应所须要的时间设置背景颜色;一类是根据文件类型进行限制。
· type有如下几种类型:
·
· Time HeatMap复选框会基于服务器返回给定响应所须要的时间为每一个session设置背景颜色。
10)Response Headers:与Request Headers不一样的是,这块区域是针对响应数据的头部进行过滤。
这么多设置项,比较经常使用的就是1.2.3部分。经过过滤设置,能够快速的帮助咱们找到咱们须要抓包分析的数据包,从而提升效率,避免过多的数据包信息干扰咱们找到正确的数据包。
3、
咱们知道Fiddler是位于客户端和服务器之间的代理,它可以记录客户端和服务器之间的全部 HTTP请求,能够针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至能够修改服务器返回的数据,功能很是强大,是web调试的利器。前面咱们介绍了如何使用Fiddler进行抓包和分析,以及如何抓取APP上的数据包。这里咱们介绍下如何修改请求和响应数据,也就是设置断点。
对request设置断点
1)经过菜单选项或快捷键F11进行设置,如图
当咱们设置断点后,进行HTTP请求,数据包顺序列会有中断的标记,单击该数据包能够看到在右侧会增长一行操做栏。这个时候咱们在前端是没有正常加载网页的,点击【Run to Completion】后能够返回响应数据。
接下来为了看咱们的断点设置是否生效,咱们以登陆为例子进行测试。登陆无忧行网站,输入正确的用户名和密码,点击登陆。咱们断点规则设置为before request,而后将密码清空,看看服务器给咱们返回了什么响应数据。
继续以登陆为例子,此次咱们将手机号改为非移动帐号进行登陆。
因而可知,咱们的断点已经设置成功,而且成功修改了HTTP的请求数据。
2)经过菜单选项或快捷键进行设置时,会将全部的HTTP请求都设置断点,但有时咱们只想针对某个服务器发出的请求设置断点,应该怎么操做呢?Fiddler是支持命令操做的,咱们能够经过“bpu 服务器地址”命令来对特定的请求设置断点。
在下图所示的位置输入命令,而后回车运行。
这个时候从该服务器发出的全部请求都会被中断,而从其余服务器发出的请求能够正常响应。
若是要清除原来的断点,能够在命令行输入“bpu”,就会清除全部的断点。
对response设置断点
1)一样的也能够经过菜单选项或快捷键alt+F11进行设置
2)经过命令“bpafter 服务器地址”
咱们也用一个实例来验证经过设置断点修改响应数据。以百度主页为例,咱们拦截到响应数据中的title值为”百度一下,你就知道“,咱们将响应数据中的title改为”test百度一下,你就知道“,而后在前端看看最终展现的是什么数据。
经过几个实例,更好的帮助咱们理解断点的含义,也巩固了Fiddler做为代理服务器的概念。接下来咱们再来讲说,Fiddler另外一个很实用的功能:Fiddler的编码和解码。
Fiddler的编码和解码
1)响应body解码
有时候咱们在Fiddler上看到响应数据是几个乱码字符,首先咱们能够点击,上方黄色提示区域直接进行解码。以下面的两个图所示。
2)请求和响应数据解码
有的时候,基于安全性考虑,开发人员会将请求和响应的body根据必定规则进行解码。若是是普通的编码规则,咱们能够直接经过Fiddler操做进行解码。例如在登陆百度网站的时候,有个参数的值是一个url地址,这个url通过urlEncode进行转码了。咱们就能够将该参数经过urlDecode进行解码。
首先,找到这个参数,选中后右键选择【send to TextWizard】
而后,在【transform】中找到【URLDecode】,字段值就被成功解码,咱们就能够很清楚的看到里面有哪些参数以及参数的值是什么了。
上面都是解码的例子,编码在实际运用中不多,就不介绍了。另外里面还有不少其余的编码/解码方法,就不一一举例啦~~
---恢复内容结束---
Fiddler基础知识
· Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工做的,使用的代理地址是:127.0.0.1,端口默认为8888,咱们也能够经过设置进行修改。
· 代理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代理服务器会将数据包进行拦截,代理服务器再冒充客户端发送数据到服务器;同理,服务器将响应数据返回,代理服务器也会将数据拦截,再返回给客户端。
· Fiddler能够抓取支持http代理的任意程序的数据包,若是要抓取https会话,要先安装证书。
HTTP协议
· 要分析Fiddler抓取的数据包,咱们首先要熟悉HTTP协议。HTTP即超文本传输协议,是一个基于请求与响应模式的、无状态的、应用层的协议,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
· HTTP的工做过程:当咱们请求一个超连接时,HTTP就开始工做了,客户端先发送一个请求到服务器,请求内容包括:协议版本号、请求地址、请求方式、请求头和请求参数;服务器收到请求后作相应的处理,并将响应数据返回到客户端,响应内容包括:协议版本号、状态码和响应数据。前端根据响应数据作相应的处理,就是最终咱们看到的内容。这些过程是HTTP自动完成的,咱们只是输入或点击请求地址,而后查看前端给咱们展现的内容。更多关于HTTP协议的介绍请参考:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
· 请求方式经常使用的有:GET、PUT、POST、DELETE。
· HTTP状态码主要分为5类:以1开头的表明请求已被接受,须要继续处理;以2开头的表明请求已成功被服务器接收、理解、并接受;以3开头的表明须要客户端采起进一步的操做才能完成请求;以4开头的表明了客户端看起来可能发生了错误,妨碍了服务器的处理;以5开头的表明了服务器在处理请求的过程当中有错误或者异常状态发生,也有多是服务器意识到以当前的软硬件资源没法完成对请求的处理。
· 常见的主要有:200:服务器成功处理了请求;404:未找到资源;500:内部服务器错误;503:服务器目前没法为请求提供服务;302:请求的URL已临时转移;304:客户端的缓存资源是最新的,要客户端使用缓存。
· 每一个状态码的详细介绍请参考:https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin
Fiddler的使用
· Fiddler是一个很好用的抓包工具,能够将网络传输发送与接收的数据包进行截获、重发、编辑等操做。也能够用来检测流量。
· Fiddler安装后,设置的端口默认为8888,当Fiddler启动后,默认将IE的代理设为了127.0.0.1:8888,而其余如火狐浏览器须要手动设置代理后才能够抓包。设置内容如图:
·
1)要使用Fiddler进行抓包,首先须要确保Capture Traffic是开启的(安装后是默认开启的),勾选File->Capture Traffic,也能够直接点击Fiddler界面左下角的图标开启和关闭抓包。
2)因此基本上不须要作什么配置,安装后就能够进行抓包了。那么咱们怎么分析抓到的这些数据包呢?如图所示的区域为数据包列表,要分析这些数据包,首先要了解各字段的含义。
#:顺序号,按照抓包的顺序从1递增
Result:HTTP状态码
Protocol:请求使用的协议,如HTTP/HTTPS/FTP等
HOST:请求地址的主机名或域名
URL:请求资源的位置
Body:请求大小
Caching:请求的缓存过时时间或者缓存控制值
Content-Type:请求响应的类型
Process:发送此请求的进程ID
Comments:备注
Custom:自定义值
3)每一个Fiddler抓取到的数据包都会在该列表中展现,点击具体的一条数据包能够在右侧菜单点击Insepector查看详细内容。主要分为请求(即客户端发出的数据)和响应(服务器返回的数据)两部分。
4)HTTP Request Header:以百度为例,查看请求百度主页这条数据包的请求数据,从上面的Headers中能够看到以下内容:
请求方式:GET
协议: HTTP/1.1
Client 头域:
Accept: text/html, application/xhtml+xml, image/jxr, */* ---------浏览器端能够接受的媒体类型
Accept-Encoding: gzip, deflate ---------压缩方法
Accept-Language: zh-CN ---------语言类型
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393 ---------客户端使用的操做系统和浏览器的名称和版本
COOKIE头域:将cookie值发送给服务器
Transport 头域:
Connection:当网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP链接是否关闭。keep-alive表示不会关闭,客户端再次访问这个服务器上的网页,会继续使用这一条已经创建的链接;close表示关闭,客户端再次访问这个服务器上的网页,须要从新创建链接。
HOST:主机名或域名,若没有指定端口,表示使用默认端口80.
5)HTTP Response Header:继续以百度为例,如图所示:
协议:HTTP/1.1
状态码:200
Cache头域:
Cache-Control: private ---------此响应消息不能被共享缓存处理,对于其余用户的请求无效
Date: Sat, 05 Aug 2017 04:37:43 GMT ---------生成消息的具体时间和日期
Expires: Sat, 05 Aug 2017 04:37:42 GMT ---------浏览器会在指定过时时间内使用本地缓存
Cookie/Login 头域:
Set-Cookie: BDSVRTM=264; path=/ ---------把cookie发送到客户端
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=1425_21097_22157; path=/; domain=.baidu.com
Entity头域
Content-Length: 202740 ---------正文长度
Content-Type: text/html;charset=utf-8 ---------告知客户端服务器自己响应的对象的类型和字符集
Miscellaneous 头域:
Bdpagetype: 2
Bdqid: 0x99791efd00036253
Bduserid: 2577220064
Server: BWS/1.1 ---------指明HTTP服务器的软件信息
X-Ua-Compatible: IE=Edge,chrome=1
Security头域:
Strict-Transport-Security: max-age=172800 ---------基于安全考虑而须要发送的参数,关于这个参数的解释,请参考:http://www.freebuf.com/articles/web/66827.html
Transport头域:
Connection: Keep-Alive
6)TextView:显示请求或响应的数据。
7)WebForms:请求部分以表单形式显示全部的请求参数和参数值;响应部分与TextView内容是同样的。
8)Auth:显示认证信息,如Authorization
9)Cookies:显示全部cookies
10)Raw:显示Headers和Body数据
11)JSON:若请求或响应数据是json格式,以json形式显示请求或响应内容
12)XML:若请求或响应数据是xml格式,以xml形式显示请求或响应内容
13)上面是以百度主页为例,百度主页采用的是GET请求,在TextView中没有请求body,咱们再以无忧行网站登陆接口为例,它是一个POST请求,除了请求头外,在TextView中多了请求数据。这也是GET请求和POST请求的一个区别。GET请求是将请求参数放在url中,而POST请求通常是将请求参数放在请求body中。
总结:经过Fiddler能够抓取请求和响应参数,经过对参数进行分析,能够定位是前端仍是后台问题。例如咱们在测试登陆接口时,输入了正确的手机号和密码,但前端提示“请输入正确的用户名和密码”;仅仅经过界面提示咱们只能描述bug表象,但不能分析出问题缘由。假设经过抓包咱们发现是因为前端参数名错误或参数值为空,从而致使后台报错。这个时候咱们将bug指向前端开发人员,并将参数数据和接口文档中对应的报文数据做为附件上传,是否是能够提升bug的解决效率呢?Fiddler在实际的功能测试中有很大的做用,一方面帮助咱们更好的了解某个业务中客户端和服务器端是经过哪些接口进行请求的,从而更好的了解代码逻辑;另外一方面,咱们还能够经过响应数据判断哪里出现了问题,例如可能服务器程序挂了,致使前端报“服务器故障”,这时咱们经过抓包发现响应数据返回502,这时咱们能够手动去重启服务或是联系运维重启服务,从而提升问题的解决效率。
在上一篇中介绍了Fiddler的基本使用方法。经过上一篇的操做咱们能够直接抓取浏览器的数据包。但在APP测试中,咱们须要抓取手机APP上的数据包,应该怎么操做呢?
Andriod配置方法:
1)确保手机和Fiddler所在主机在同一个局域网中
2)获取Fiddler所在主机的ip地址,经过cmd命令进入命令编辑器,输入ipconfig -all,找到IPv4地址,记下该地址
3)对手机所链接的无线网络进行设置,点击WLAN,长按与Fiddler所在主机在同一个局域网的wifi,长按点击【修改网络】,选中【显示高级选项】,代理设置为手动,输入代理服务器的主机名和端口后保存。代理服务器的主机名即2)中的IPv4地址,端口为Fiddler上配置的端口(默认为8888),能够到Fiddler菜单栏中【Tool】-【Fiddler Option】的【Connections】中查看。
4)在手机浏览器上输入:http://IPv4地址:端口(例如:http://192.168.11.29:8888),点击【FiddlerRoot certificate】下载安装Fiddler证书。
5)若在浏览器上没法打开该地址,须要作两项检查:1、确保在浏览器、wifi中配置的代理与Fiddler所在主机地址和Fiddler中配置的端口,三者保持一致;2、确保在Fiddler-【Tools】-【Fiddler Option]-[Connection]中【Allow remote computers to connect】已经勾选上,若没有勾选,则须要勾选后保存并重启Fiddler。
6)这时咱们打开手机上的浏览器或APP,能够在Fiddler上看到手机上的数据包了。
IOS配置方法:
1)基本与andriod的配置方法一致,除了安装证书方式与andriod略有不一样,另外ios在下载证书后,须要手动信任证书。设置方法:打开【设置】-【通用】-【关于本机】-【证书信任证书】,找到对应的证书,启用便可。
HTTPS抓包
上面都是针对HTTP协议进行抓包的设置,那么HTTPS须要进行什么配置呢?
1)打开Fiddler-【Tools】-【Fiddler Option】,切换到HTTPS选项卡,勾选【Capture HTTPS CONNECTs】和【Decrypt HTTPS traffic】,而后点击【Actions】-【Trust Root Certificate】,而后按照提示一路yes,直到弹框提示“Trust Cert success”点击肯定后,重启Fiddler就能够抓取HTTPS协议的数据包了。
Fiddler过滤会话
咱们在使用Fiddler进行抓包时,发现只要是使用了Fiddler代理服务器的全部HTTP/HTTPS数据包都会在Fiddler数据列表中显示出来,但有时咱们只关注从某个或某些服务器发出的请求,不想要看到其余服务器的数据包,应该怎么进行设置呢?咱们都知道Fiddler是一款强大的抓包工具,咱们能够经过设置来过滤只筛选出咱们想要的数据包。
1)在右侧菜单中,找到Fittlers选项,共有9个部分进行设置
2)Use Filters:勾选则表示使用过滤,不勾选则表示不进行过滤
3)Actions:有四个选项,Run Filterset now:当即运行过滤设置;Load Filterset:加载保存的过滤设置;Save Filterset:保存过滤设置;help:帮助
4)Hosts:该设置项有两个选项
· 第一个下拉框是只显示内网或者外网选项
·
· 第二个下拉框是根据主机名信息显示或者隐藏或者标记指定请求
·
5)Client Process:有三个选项,Show only traffic from:根据进程信息进行过滤,选择后,将只显示由该进程发出的请求;Show only Internet Explorer traffic:只关心由IE浏览器发出的请求;Hide traffic from Service Host:隐藏来自service host(即由svchost.exe进程发出)的请求
6)Request Headers:有五个选项,Show only if URL contains:能够经过正则表达式过滤请求地址中包含或不包含的内容,例如REGEX:\.(js|css|js\?.*|css\?.*)$(隐藏全部js和css请求);Hide if URL contains:与Show only if URL contains相反,一个是显示,一个是隐藏;Flags requests with headers:支持指定某个http请求头名称,若是在web session列表中存在该请求头,会加粗显示该session;Delete requests headers:与Flags requests with headers相似,这里是若是包含该请求头,则删除该请求头;Set request header:将HTTP请求头更新为所输入的值。
7)Breakpoints:断点设置,有四个选项。Break request on POST:对POST请求设置断点;Break request on GET with query string:会为全部方法为GET且URL中包含了给定查询条件的请求设置断点;Break on XMLHttpRequest:对全部可以肯定是经过XMLHTTPRequest对象发送的请求设置断点;Break response on Content-Type:会为全部响应头Content-Type中包含了指定文本的响应设置响应断点。
8)Response Status Code:根据响应状态码设置断点。
9)Response Type and Size:有几种类型,一类是根据响应数据的类型显示或隐藏;一类是根据响应数据的大小显示或隐藏;一类是根据响应所须要的时间设置背景颜色;一类是根据文件类型进行限制。
· type有如下几种类型:
·
· Time HeatMap复选框会基于服务器返回给定响应所须要的时间为每一个session设置背景颜色。
10)Response Headers:与Request Headers不一样的是,这块区域是针对响应数据的头部进行过滤。
这么多设置项,比较经常使用的就是1.2.3部分。经过过滤设置,能够快速的帮助咱们找到咱们须要抓包分析的数据包,从而提升效率,避免过多的数据包信息干扰咱们找到正确的数据包。
3、
咱们知道Fiddler是位于客户端和服务器之间的代理,它可以记录客户端和服务器之间的全部 HTTP请求,能够针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至能够修改服务器返回的数据,功能很是强大,是web调试的利器。前面咱们介绍了如何使用Fiddler进行抓包和分析,以及如何抓取APP上的数据包。这里咱们介绍下如何修改请求和响应数据,也就是设置断点。
对request设置断点
1)经过菜单选项或快捷键F11进行设置,如图
当咱们设置断点后,进行HTTP请求,数据包顺序列会有中断的标记,单击该数据包能够看到在右侧会增长一行操做栏。这个时候咱们在前端是没有正常加载网页的,点击【Run to Completion】后能够返回响应数据。
接下来为了看咱们的断点设置是否生效,咱们以登陆为例子进行测试。登陆无忧行网站,输入正确的用户名和密码,点击登陆。咱们断点规则设置为before request,而后将密码清空,看看服务器给咱们返回了什么响应数据。
继续以登陆为例子,此次咱们将手机号改为非移动帐号进行登陆。
因而可知,咱们的断点已经设置成功,而且成功修改了HTTP的请求数据。
2)经过菜单选项或快捷键进行设置时,会将全部的HTTP请求都设置断点,但有时咱们只想针对某个服务器发出的请求设置断点,应该怎么操做呢?Fiddler是支持命令操做的,咱们能够经过“bpu 服务器地址”命令来对特定的请求设置断点。
在下图所示的位置输入命令,而后回车运行。
这个时候从该服务器发出的全部请求都会被中断,而从其余服务器发出的请求能够正常响应。
若是要清除原来的断点,能够在命令行输入“bpu”,就会清除全部的断点。
对response设置断点
1)一样的也能够经过菜单选项或快捷键alt+F11进行设置
2)经过命令“bpafter 服务器地址”
咱们也用一个实例来验证经过设置断点修改响应数据。以百度主页为例,咱们拦截到响应数据中的title值为”百度一下,你就知道“,咱们将响应数据中的title改为”test百度一下,你就知道“,而后在前端看看最终展现的是什么数据。
经过几个实例,更好的帮助咱们理解断点的含义,也巩固了Fiddler做为代理服务器的概念。接下来咱们再来讲说,Fiddler另外一个很实用的功能:Fiddler的编码和解码。
Fiddler的编码和解码
1)响应body解码
有时候咱们在Fiddler上看到响应数据是几个乱码字符,首先咱们能够点击,上方黄色提示区域直接进行解码。以下面的两个图所示。
2)请求和响应数据解码
有的时候,基于安全性考虑,开发人员会将请求和响应的body根据必定规则进行解码。若是是普通的编码规则,咱们能够直接经过Fiddler操做进行解码。例如在登陆百度网站的时候,有个参数的值是一个url地址,这个url通过urlEncode进行转码了。咱们就能够将该参数经过urlDecode进行解码。
首先,找到这个参数,选中后右键选择【send to TextWizard】
而后,在【transform】中找到【URLDecode】,字段值就被成功解码,咱们就能够很清楚的看到里面有哪些参数以及参数的值是什么了。
上面都是解码的例子,编码在实际运用中不多,就不介绍了。另外里面还有不少其余的编码/解码方法,就不一一举例啦~~