Fiddler基本介绍:css
fiddler是一个很强大的抓包工具,原理是以一个代理服务器的形式进行工做的,默认的代理地址:127.0.0.1 端口8888,也能够自行设置。html
什么是代理:前端
就是客户端和服务器端之间设置了一道关卡,客户端发送请求数据,代理服务器会将数据包进行拦截,代理服务器在冒充客户端发送数据到服务器,同理,服务器返回的数据,到代理服务器会进行拦截,冒充服务器发送数据到客户端。ios
fiddler能够抓取支持http代理的任意程序的数据包,若是要抓取HTTPS,则须要先安装证书。web
HTTP协议:正则表达式
HTTP:超文本传输协议,是一个基于请求与响应模式的,无状态的,应用层的协议,多数web开发都是创建于http协议下的。chrome
HTTP工做过程:当咱们请求一个超连接时,HTTP开始工做,客户端先发送一个请求到服务器,请求内容包含:协议版本号、请求地址、请求方式、请求头、请求参数,服务器收到请求后会作相应的处理,并将响应数据返回到客户端,响应内容包含:协议版本号、状态码、响应数据。这些过程都是http协议自动完成的,咱们只须要输入连接,点击发送。详细信息参考:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.htmljson
请求方式常有:GET/POST/PUT/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
常见的报错码是什么缘由形成的:
400(bad request/错误请求):检查脚本中的请求参数语法格式是否正确
401(unauthorized/未受权):检查脚本中的请求是否缺乏必要的header信息
403(forbidden/禁止):检查脚本中的用户信息,是否拥有权限去操做业务
404(not found/未找到):检查请求url地址,或者url中拼接的参数是否正确;检查web服务器是否启动,如查看Tomcat日志
405(method not allowed/方法未容许): 检查http请求方式是否正确,好比get请求写成了post方式;检查请求参数是否正确
500(internal server error/内部服务器错误):服务器程序内部报错,首先登陆服务器查看运行日志,根据报错缘由排查问题,可能有两方面的缘由
1. 代码逻辑错误,形成报错; 2.请求参数异常,形成服务器端没法处理
502/503/504:bad gateway/错误的网关,server unavailable/服务没法得到,gateway timeout/网关超时
若是单次调用接口就报该错误,说明是后端服务器配置有问题,或者服务不可用;
若是并发压测时出现此错误,说明是后端压力太大,出现异常,此问题通常是后端出现了响应时间过长或者无响应形成。
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)百度为例
请求方式:GET
协议: HTTP/1.1
Client 头域:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 ---------浏览器端能够接受的媒体类型
Accept-Encoding: gzip, deflate, br ---------压缩方法
Accept-Language: zh-CN,zh;q=0.9 ---------语言类型
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
---------客户端使用的操做系统和浏览器的名称和版本
COOKIE头域:将cookie值发送给服务器
Transport 头域:
Connection:当网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP链接是否关闭。keep-alive表示不会关闭,客户端再次访问这个服务器上的网页,会继续使用这一条已经创建的链接;close表示关闭,客户端再次访问这个服务器上的网页,须要从新创建链接。
HOST:主机名或域名,若没有指定端口,表示使用默认端口80.
5)HTTP Response Header:继续以百度为例
协议:HTTP/1.1
状态码:200
Cache头域:
Cache-Control: private ---------此响应消息不能被共享缓存处理,对于其余用户的请求无效
Date: Thu, 30 May 2019 07:10:09 GMT ---------生成消息的具体时间和日期
Expires: Thu, 30 May 2019 07:09:10 GMT ---------浏览器会在指定过时时间内使用本地缓存
Cookie/Login 头域:
Set-Cookie: BD_HOME=0; path=/ ---------把cookie发送到客户端
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: delPer=0; path=/; domain=.baidu.com
Set-Cookie: H_PS_PSSID=1422_28939_21090_18559_29063_28518_29098_28830_28584_26350; path=/; domain=.baidu.com
Entity头域
Content-Encoding: gzip ---------正文长度
Content-Type: text/html ---------告知客户端服务器自己响应的对象的类型和字符集
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,这时咱们能够手动去重启服务或是联系运维重启服务,从而提升问题的解决效率。
HTTPS抓包:
1)打开Fiddler-【Tools】-【Fiddler Option】,切换到HTTPS选项卡,勾选【Capture HTTPS CONNECTs】和【Decrypt HTTPS traffic】,而后点击【Actions】-【Trust Root Certificate】,而后按照提示一路yes,直到弹框提示“Trust Cert success”点击肯定后,重启Fiddler就能够抓取HTTPS协议的数据包了。
须要给相应浏览器导入证书:
1.能够先win+r,输入certmgr.msc,点击操做,输入fiddler,将相应的证书所有删掉
下载安装fiddler后
fiddler自己: tools-options-HTTPS 勾选前三个选项
点击tools-option-HTTPS-ACTIONS:第一项trust root certificate出现安全证书下载提示,按照步骤一直“是”
在点击tools-option-HTTPS-ACTIONS:第二项,导出
在须要的浏览器,找到证书,导入就能够啦
重启浏览器和fiddler,先打开fiddler,在打开浏览器
2.若是在设置过程当中报错:“没法将Windows配置为信任的fiddler根证书”
能够在fiddler安装目录中:进入cmd,输入:
D:\fiddler\Fiddler Web Debugger>
makecert.exe -r -ss my -n "CN=DO_NOT_TRUST_FiddlerRoot,O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com"-sky signature -eku 1.3.6.1.5.5.7.3.1 -h 1 -cy authority -a sha1 -m 120 -b 10/12/2050
最后的日期要大于安装软件的日期: 若是报错,检查是否是输入内容存在换行,
以后再从新设置就OK
3.设置谷歌的代理:谷歌浏览器-设置-搜索“代理”-打开“代理”-链接-局域网-设置成三对127.0.0.1 8888
Fiddler过滤会话
Fiddler是一款强大的抓包工具,咱们能够经过设置来过滤只筛选出咱们想要的数据包。
1)在右侧菜单中,找到Fittlers选项,共有9个部分进行设置
输入过滤内容后,点击actions选择当即执行,则能够选择出来本身须要的内容
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:有几种类型,一类是根据响应数据的类型显示或隐藏;一类是根据响应数据的大小显示或隐藏;一类是根据响应所须要的时间设置背景颜色;一类是根据文件类型进行限制。
10)Response Headers:与Request Headers不一样的是,这块区域是针对响应数据的头部进行过滤。
这么多设置项,比较经常使用的就是1.2.3部分。经过过滤设置,能够快速的帮助咱们找到咱们须要抓包分析的数据包,从而提升效率,避免过多的数据包信息干扰咱们找到正确的数据包。
Andriod配置方法:
1. 确保手机和Fiddler主机在同一个局域网中,链接同一个WiFi
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.18.32: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的配置:
基本与andriod的配置方法一致,除了安装证书方式与andriod略有不一样,另外ios在下载证书后,须要手动信任证书。设置方法:打开【设置】-【通用】-【关于本机】-【证书信任证书】,找到对应的证书,启用便可。
设置断点,篡改数据:
咱们知道Fiddler是位于客户端和服务器之间的代理,它可以记录客户端和服务器之间的全部 HTTP请求,能够针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至能够修改服务器返回的数据,功能很是强大,是web调试的利器。前面咱们介绍了如何使用Fiddler进行抓包和分析,以及如何抓取APP上的数据包。这里咱们介绍下如何修改请求和响应数据,也就是设置断点。
before response:这个是打在request请求的时候,未到达服务器以前
第一种:打开Fiddler 点击Rules-> Automatic Breakpoint ->Before Requests(这种方法会中断全部的会话)
如何消除命令呢? 点击Rules-> Automatic Breakpoint ->Disabled
第二种: 在命令行中输入命令: bpu www.baidu.com (这种方法只会中断www.baidu.com)
如何消除命令呢? 在命令行中输入命令 bpu
After response:也就是服务器响应以后,在Fiddler将响应传回给客户端以前
第一种:打开Fiddler 点击Rules-> Automatic Breakpoint ->After response(这种方法会中断全部的会话)
如何消除命令呢? 点击Rules-> Automatic Breakpoint ->Disabled
第二种: 在命令行中输入命令: bpafter www.baidu.com (这种方法只会中断www.baidu.com)
如何消除命令呢? 在命令行中输入命令 bpafter
(通常在中断以后,就要将其取消,要否则会影响到下面的操做)
具体操做,以淘宝登陆页面和登陆成功之后为例简单的介绍一下:
1 ) before request
第一步:首先打开淘宝登陆页面;
第二步:复制连接,在fiddler命令行中设置断点,bpu 淘宝登陆URL,点击回车键;
第三步:输入错误的用户名密码,点击登陆按钮
第四步:能够看登陆页面浏览器一直在加载中,且fiddler中有断点,单击fiddler中的断点,在inspectors中能够看到body中有上送用户名密码的地方,
进行上送,点击下面run to completion
第六步:能够看到浏览器的页面是刚才输入的用户名
第七步: 取消断点设置,命令行输入bpu,回车键
2) after response
第一步:设置断点,命令行中输入bpafter 登陆成功之后返回的URL,点击回车
第二步: 登陆页面输入正确的用户名和密码,点击登陆,出现响应断点
第三步:能够在choose response中选择想要响应的内容,例如:401_authbasic.dat,点击run to completion
第四步:能够看到浏览器的响应
第五步 :取消设置的断点,bpafter,回车键
这里也能够设置自定义的图片,设置方法和上面一致:
检查响应:
通常状况使用强制刷新(Ctrl+F5),不要使用F5刷新,强制刷新能够将全部资源从新加载
Fiddler 的AutoResponder tab容许你从本地返回文件,而不用将http request 发送到服务器上。
属于“重定向功能”,主要适合实时进行绘画拦截,而后替换原始资源功能。
1. 先抓包抓取一段,而后选择本身想要替换的连接;
2. 从左侧拉倒右侧AutoResponder中;
3.勾选Enable automatic reaponses 和Unmatched requests passthrough
4.在下面rule editor中点击,选择“find a file...”
点击保存,save
5. 在使用刚拉过去的那个网址,在浏览器上刷新,则会出现自定义的内容
Fiddler模拟低速网络(限速)
1)fiddler中rules-customize rules,在文档中找到下面内容
请求300ms,每KB
响应150ms,每KB
2)启用
rules - performance-simulate modem speeds
利用Fiddler模拟mock
在作接口的时候比较方便,可以按照本身你想要的规则,去模拟请求对应的响应。
实际状况:
假设某官网还在建设中,发送了请求没有响应,可是又想看一下会返回什么内容,可使用mock。
mock就能够帮你模拟这样的问题,好比,必须登陆才能够查看文章,可是登陆代码没完成,查看文章的代码完成了。
mock模拟的原理: 一个请求发送,到登陆的代码,返回成功(某个字段代码登陆成功),(拿到必须条件字段)而后查看文章,就返回成功。
例如: 访问小强测试品牌官网http://xiaoqiangtest.sxl.cn,响应返回一个json串
1. 在本机电脑新建一个txt文件,里面写须要返回的json串,保存;
2. 在fiddler打开,访问官网首页,在autoresponder中拉进去须要的连接,在下面添加好刚才的json串文件
3. 检查结果
Fiddler 中利用composer自定义请求
自定义请求: 本身定义发送到哪里,发送什么内容
填写后,发送:
若是响应乱码的话,则填写Content-Type:charset=utf-8
POST:body里面填写须要的参数