多数资料摘抄至 https://www.cnblogs.com/miantest/p/7289694.htmlhtml
1、在 macOS 下如何安装 (https://www.telerik.com/fiddler)前端
首先,Mac下须要使用.Net编译后的程序,须要用到跨平台的方案Mono(现阶段微软已推出跨平台的方案.Net Core,不过暂时只支持控制台程序)。安装程序能够从http://www.mono-project.com/download/#download-mac地址下载。web
安装完后,在Terminal里执行如下命令:一、/Library/Frameworks/Mono.framework/Versions/5.16.0/bin/mozroots --import --sync ⚠️ 5.16.0 的地方写对应的 Mono.framework 版本chrome
此步是为了从Mozilla LXR上下载全部受信任的root证书,存于Mono的证书库里。root证书能用于请求https地址。json
二、接下来若是想要运行Fiddler,还须要把Mono加入到环境变量中。编辑.bash_profile文件:浏览器
sudo vi ~/.bash_profile缓存
加入文本安全
export MONO_HOME=/Library/Frameworks/Mono.framework/Versions/5.0.1bash
export PATH=$PATH:$MONO_HOME/bin服务器
⚠️ 5.0.1 改为本身的 Mono.framework 版本
保存后从新打开Terminal,Mono环境已装好。
三、Fiddler的安装
从Fiddler官网https://www.telerik.com/download/fiddler下载fiddler-mac.zip的压缩包。解压到非中文字符的路径下。
Fiddler运行,先 cd 到 Fiddler 的路径下面
打开Terminal,进入到刚才解压的Fiddler路径,执行命令运行:
sudo mono Fiddler.exe
若是报错的话就用 mono --arch=32 Fiddler.exe 这个命令
2、Fiddler 基础?(多数资料摘抄至 https://www.cnblogs.com/wangning528/p/6388464.html)
Fiddler 是啥:Fiddler 是位于客户端和服务器端的 HTTP 代理,目前最经常使用的 HTTP 抓包工具,可以记录客户端和服务器端的全部 HTTP 请求,能够针对特定的 HTTP 请求,分析请求数据、设置断点、调试 web 应用,修改请求的数据,甚至能够修改服务器返回的数据,功能很是强大,是 web 调试的利器。
学习的前提,必须懂 HTTP 相关知识:
一、了解 web 及 网络基础
HTTP
a :超文本传输协议,是一种通讯协议,它容许将文本标记语言(html)文档从 web 服务器传送到客户端的浏览器,是一个应用层协议,由请求和响应构成,HTTP 是一个无状态的协议(同一个客户端此次请求和上次请求是没有对应关系的)。(网络协议:网络中数据交换而创建的规则,由于两个数据终端所用字符集不一样,因此要用协议让它们转化成另外一个客户端认识的)
b : HTTP 的端口号为 80, HTTPS 的端口号为 443 (端口号:当一台电脑启动了一个让远程电脑访问的程序,那么它就须要开启至少一个端口号来让外界访问,因此当一个系统开启了一个可让外界访问的程序后天然须要在房间上开一个窗口来接受外界的访问,这个窗口就是端口,那为何要给端口编号来区分它们呢?既然一个程序开了一个端口,那么不是外部信息均可以经过这个开启的端口来访问了吗?答案是不能够,由于数据是端口号来通知传输协议送给哪一个软件来处理的,数据是没有智慧的,若是不少程序共用一个端口来接受程序的话,那么外界的一个数据包送来的传输层就不知道该送给哪一个软件来处理,这样势必会混乱。摘抄至:https://blog.csdn.net/flying_man_/article/details/79392923)
c :工做流程
一次 HTTP 操做称为一个事务
1) 客户机和服务器须要创建链接,只要单击某个超级连接,HTTP 开始工做。
2) 创建链接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,MIME 信息包括请求修饰符、客户机信息和可能的内容。
3) 服务器接收请求后,给予相应的相应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或者错误的代码,后面是 MIME 信息包括服务器信息、实体信息和可能的内容
4)客户端接收服务器所返回的信息经过浏览器显示在用户的显示屏桑,而后客户机与服务器断开连接。
若是以上过程当中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出,对于用户来讲,这个过程是由 HTTP 本身完成的,用户只须要鼠标点击,等待信息显示就 OK 了。
3、了解 Fiddler 各个字段的含义(多数资料摘抄至 https://www.cnblogs.com/miantest/p/7289694.html) 如何抓取浏览器的 数据包?
#:顺序号,按照抓包的顺序从1递增
Result:HTTP状态码 ( 200 :一切 OK ;500("Bad Request”); 502("Bad Gateway"))
Protocol:请求使用的协议,如HTTP/HTTPS/FTP等(HTTPS简略讲是HTTP的安全版)
HOST:请求地址的主机名或域名(好比我要登陆百度,而后请求的主机名就是 www.baidu.com)
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值发送给服务器(web 服务器经过发送一个称为 Set-Cookie 的 HTTP 消息头来建立一个 cookie,而后存储在用户电脑上,在随后的请求中将这些信息发送至服务器,web 服务器就可使用这些信息来识别不一样用户。)
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,这时咱们能够手动去重启服务或是联系运维重启服务,从而提升问题的解决效率。(能够根据返回响应数据是多少 (50二、500 什么的,推测是什么 bug)
4、如何抓取手机 APP 的数据包(https://www.cnblogs.com/miantest/p/7290176.html),我用本身的 Apple 手机,没有成功,我怀疑是由于 macOS 安装 Fiddler 的问题,由于我设置 Fiddler 的 option ,设置之后要重启,可是没有重启后个人设置数据就还原了。