fiddler介绍
1、fiddler是一款HTTP协议调试代理工具,它能够抓取记录本机所所有HTTP(s)请求。其运行机制其实就是本机127.0.0.1上监听8888端口的HTTP代理。
2、fiddler无论对开发人员或者测试人员来说,都是非常有用的工具
fiddler下载与安装
官网地址:https://www.telerik.com/fiddler
1、先安装fiddlerxxx.exe
2、再安装fiddlercertmaker.exe
下载fiddlercertmaker.exe的地址:http://www.telerik.com/docs/default-source/fiddler/addons/fiddlercertmaker.exe?sfvrsn=2
3、、打开Fiddler,点击工具栏中的Tools——> Option
4、切换到 HTTPS 选项卡,勾选 Capture HTTPS CONNECTs,勾选 Decrypt HTTPS trafic,会弹出安装证书的提示。一路点是或确定安装即可。
5、重启fiddler,依然停留在 HTTPS 选项卡,点击右侧Actions,能看一个下拉菜单,点击 Export Root Certificate to Desktop,此时证书会生成到桌面上,名为 FiddlerRoot.cer,点OK保存,这样子就是证书导入成功。
使用场景
什么情况下会需要使用抓包工具
1、用手机app或浏览器访问一个页面,查看请求的结果是否正确、请求的参数是否正确。
2、在不修改任何环境的情况下,修改返回的结果,即通常所说的mock.
3、复杂场景
比如:同一个域名下的请求,/img/xxx的资源发送到serverA上,请求/api/xxx资源发送到ServerB上。
抓包工具
抓包工具有:wireshark、fiddler、httpwatch、Charles、chrome开发工具
软件名 | 简介 | 独立运行 | 支持移动设备 | 收费 |
wireshark | 网络抓包,监听网卡 | 是 | 否 | 否 |
httpwatch | 集成到ie和chrome中的网页数据分析工具 | 否 | 否 | 基础版/专业版 |
Charles | HTTP代理、HTPP监控、HTTP反代理、查看HTP通信信息 | 是 | 是 | 是 |
fiddler | 免费的HTTP通信查看工具 | 是 | 是 | 否 |
安装和使用
官网:https://www.telerik.com/fiddler
1、什么是http/https请求
在浏览器访问一个页面,在APP上查看一条新闻等,都会发起HTTP/HTTPS请求
安装使用-设置
点击Tools——>options——>HTTPS
勾选Decrypt HTTPS traffic
ignore server certificate errors(unsafe)
一、fiddler抓包
1、inspectors选项卡
inspectors选项卡下可以查看http请求和HTTP响应的报文结构。其中raw选项卡可以查看完整的信息,headers选项卡只查看信息中的header。如下图所示
2、web Sessions列表
fiddler窗口的左边是web session 列表,是fiddler中重要的部分,显示了每个session的摘要信息。fiddler中大部分操作都需要在web session列表中选择一个或者多个session,再进行其他操作。web session列表中的表头可以进行排序。
一个session包含了一个HTTP请求和一个HTTP响应,如下图所示:
Web sessions列表栏中包含的信息如下:
1)#:这是fiddler生成ID(最后是按顺序排列)
2)Result:响应的状态码
3)Protocol:使用的协议HTTP或者https
4)Host:服务器的主机名和端口号
5)URL:URL路径
6)Body:HTTP响应中包含的字节数
7)Caching:跟缓存相关的字段的值
8)Content-Type:响应中content-type的值
9)process:对应本地windows的进程
3、fiddler捕获HTTP协议的数据包
1)启动fiddler,打开任何的浏览器,输入要抓包的网址,,回到fiddler界面,在session列表中,看到fiddler已经捕获到了很多session,可以选择任何一个session,然后选择inspectors选项卡,可以查看想起内容啦。
到这里我们已经学会使用fiddler来抓取HTTP协议的数据包了。
4、fiddler设置开始捕获和停止捕获
方法一:在fiddler中单击file->capture Traffic(快捷键是F12)来开始抓包或者停止抓包。
方法二、单击fiddler左下角的“capturing”按钮来开始抓包或者停止抓包。
二、HTTP协议报文的结构
HTTP报文分为2个:一个是HTTP请求报文,一个是HTTP响应报文。
1、HTTP请求报文的结构
浏览器发送给web服务器的HTTP请求报文内容。
HTTP请求报文的详细内容如下:
2、解压HTTP响应
在fiddler抓包过程中,我们经常看到HTTP响应是乱码的,单击“response boby is encoded click to decode”按钮可以解压HTTP响应。如下图所示:
三、HTTP协请求方法和状态码
常见的HTTP方法如下:
号 | 方法 | 描述 |
1 | get | 请求指定的页面信息并返回实体主体 |
2 | have | 类似于get请求,只不过返回的响应没有具体的内容,用于获取报头 |
3 | post | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据 被包含在请求体中。post请求可能会导致新的资源的建立和或对已有资源的修改 |
4 | put | 从客户端服务器传送的数据取代指定文档的内容 |
5 | delete | 请求服务器删除指定的页面 |
1、get方法
get是最常见的方法,用于获取资源,常用于向服务器查询某些数据
我们先启动fiddler,打开浏览器,输入http://www.cnblogs.com/tankxiao/,在fiddler中可以看到浏览器发出的是get方法。如下图所示:
1.1、带参数的get方法
浏览器也可以再get方法中把数据传给服务器,数据放在URL的问号(?)后面。
将查询字符串参数追加到URL末尾,以便将信息发送给服务器。这种方法叫查询查询字符串,或者叫做query string。
例如百度的URL的地址如下:
GET /8qUJcD3n0sgCo2Kml5_Y_D3/v.gif?pid=201&pj=www&pj_name=es_sug&es_sug_hot=0&es_sug_num=9&eb_sug_num=0&es_sug_bp=1_0&path=https%3A%2F%2Fwww.baidu.com%2F&wd=&rsv_sid=1457_21078_18560_28769_28721_28558_28836_28584_28604_22158&rsv_did=45922344a77f4d272807b88fcde7d72b&t=1555839551261 HTTP/1.1
查询字符串以“名=值”这样的形式出现,多个名值之间用字符“&”隔开。
在fiddler中,使用WebForms选项卡可以清楚的看到GET方法中的查询字符串参数。如下图所示:
2、post方法
post方法通常用来把表单中填好的数据发送给服务器
2.1我们可以看到浏览器发出的是post方法,该方法把用户名和密码的消息发送给服务器。
2.2使用webforms tab可以看到boby主体的内容,如下图所示:
2.3 get和post方法区别
1)get提交数据会放在URL之后,以问号(?)分割URL和传输数据,参数直接以&相接,如:GET /8qUJcD3n0sgCo2Kml5_Y_D3/v.gif?pid=201&pj=www&pj_name。post方法是把提交的数据放在HTTP包的body中。
2)get提交的数据大小有限制(因为浏览器对URL的长度有限制),post方法提交的数据大小没有限制。
3)get方法需要使用request.QueryString来取得变量的值,而post方法提交的数据大小没有限制。
4)get方法提交数据会带来安全问题,比如一个登录页面通过get方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。
3、HTTP状态码
3.1什么是状态码?
每个HTTP响应报文都会携带一个状态码,用于告诉客户端请求是否成功,状态码是一个3位数的代码。
3.2状态码的分类
状态码 | 已定义范围 | 分类 |
1xx | 100—101 | 信息提示,表示请求已被成功接收,继续处理 |
2xx | 200—206 | 成功,表示请求已被成功接收、理解、接受 |
3xx | 300—305 | 重定向,要完成请求,必须进行更进一步的处理 |
4xx | 400—415 | 客户端的错误,请求有语法错误或请求无法实现 |
5xx | 500—505 | 服务器错误,服务器未能实现合法的请求 |