一、Fiddler简介
Fiddler,是一个位于客户端和服务端之间的HTTP协议调试代理工具,功能非常强大,是web和app的调试利器,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据,是目前最常用的http抓包工具之一;
Fiddler**能做什么?**
在移动互联网时代,作为软件测试工程师,fiddler绝对是值得掌握并添加进技术栈里的一款好工具。在我们日常的测试工作中,哪些场景能用到fiddler?
1,接口报文分析,查看、分析请求内容细节
2, 辅助定位bug,解密https的会话,全局、局部断点功能
3, 构建模拟测试场景,监控浏览器所有的http/https流量,伪造客户端请求和服务端响应
4, APP弱网模拟测试
5, 前端性能分析及优化
6, 安全性测试
使用场景
接口调试、接口测试、线上环境调试、web性能分析
判断前后端bug、开发环境hosts配置、mock、弱网断网测试
工作原理
二、HTTP协议
HTTP(HyperText Transfer Protocol)即超文本传输协议,是用于web服务器和客户端浏览器之间的超文本信息(包括文本,图片,链接等)传输的规范,HTTP协议位于TCP/IP协议栈的应用层,通过TCP连接传送数据。
HTTP协议不关注数据传输的方式,主要是用来规定客户端和服务器之间的数据传输的格式,最初是用来向客户端传输HTML内容的,端口号为80。
是一种典型的请求应答式协议,并且是无状态的应用层协议。
(1)HTTP**请求报文**
HTTP请求报文主要由请求行、请求头部、空行、请求体正文 4部分组成
常见的请求方法(Request Method)
方法名称 | 说明 |
GET | 获取服务器资源 (请求资源) |
POST | 传输实体主体到服务器 (提交资源) |
PUT | 传输主体文件到服务器的URL指定位置 (替换资源) |
HEAD | 获取报文头部信息,不返回主体部分,用于确认资源有效性,更新日期等 (获取响应头) |
DELETE | 删除URL指定位置文件 (删除资源) |
OPTIONS | 询问指定的方法,查询URL资源所支持的请求方法 (允许客户端查看服务器的性能) |
TRACE | 追踪路径,让服务器将之前的请求通信路径返回给客户端的方法 (回显服务器收到的请求,用于测试或诊断) |
CONNECT | 要求使用隧道协议连接代理,主要用地HTTPS协议 |
URL
Uniform Resource Locator:统一资源定位符,用于描述网上的资源
格式:schema://host[:port#]/path/.../[?Query-string]
https://mp.csdn.net/mp_blog/creation/
Scheme:协议,如http,https,ftp(传输文件)等
Host:域名或ip地址
Port:端口(例如:tomcat:8080,mysql:3306),默认80端口可以省略
Path:资源路径
Query-string:发送的参数(例如:get请求加参数key=value,key1=value1)
如:https://www.baidu.com/s?wd=张三
请求头(Request header)
Host | 主机IP地址或域名 |
User-Agent | 告诉服务器,客户端的软件环境,比如操作系统、浏览器版本 |
Accept | 指定客户端接收信息的类型,如:image/jpg,text/html,application |
Accept-Charset | 客户端接受的字符集,如gb2312、iso-8859-1 |
Accept-Encoding | 客户端可接受的内容编码,如gzip(压缩) |
Accept-Language | 客户端可接受的语言,如 zh-CN,zh,en-us;q=0.9(第一个会是首选的语言,其它语言会携带一个“q”值,来表示用户对该语言的喜好程度(0~1) |
Authorization | 客户端提供给服务端的进行鉴权的信息 |
Cookie | 客户端通过请求头,将Cookie信息传给服务器 |
Referer | 当前文档的URL,表示从哪个站点链接过来的(防止盗链) |
Content-Type | 请求体内容类型,如 Application, Multipart/form-data |
Content-Length | 数据长度 |
Cache-Control | 缓存机制,如no-cache |
Pragma | 防止页面被缓存,和Cache-Control:no-cache一样 |
Connection | 告诉服务器,在完成本次传输后,是否保持连接 如keep-alive |
*如何添加或设置请求头?
- 点击Filters(过滤器)-->勾选use filters;
- 勾选set request header 例如:name wangchen;
这时候所有请求发送时都会添加一个请求头(有些头部信息服务器不一定读)
(2)HTTP响应报文
HTTP响应报文主要由响应状态行、响应头、空行、响应体 4部分组成
状态码
状态码是3位数字代码,表示服务器返回的HTTP响应状态
状态码 | 主机**IP地址或域名** |
1XX | 指示信息,表示请求已接收,继续处理 |
2XX | 表示请求已被成功接收、理解、接受, 如:200表示请求处理成功; |
3XX | 重定向-要完成请求必须进行更进一步的操作,302资源已经变更到其它位置了 |
4XX | 客户端错误,请求有语法错误或请求无法实现,如400 客户端语法错误,403服务器拒绝提供服务,404请求资源不存在(输了错误的资源地址) |
5XX | 服务器错误,服务器未能实现合法的请求,如500服务器发生不可预期的错误,503当前服务器不能处理请求,一段时间后恢复 |
*了解http状态码:HTTP状态码_百度百科
响应头(Response header)
响应头 | 描述 |
Server | http服务器的软件信息,如Server: Apache/2.2.4 (Win32) PHP/5.2.4 |
Date | 响应报文的时间 |
Expires | 指定缓存过期时间 |
Set-cookie | 设置cookie |
Last-modified | 资源最后修改时间 |
Content-type | 响应的类型和字符集,如Content-Type: text/html; charset=utf-8 |
Content-length | 内容长度Content-Length: 10262 |
Connection | 如Connection: Keep-Alive,表示tcp连接不关闭,不会永久保持连接,服务器可设置 |
Location | 指明重定向的位置,新的URL地址,如302/304(ETag/location)的情况 |
*客户端,请求头,入参,头部信息怎么设置需要跟开发对接
Fiddler下载安装Jmeter插件,可以导出所有请求,做接口测试时在jmeter直接可以打开,file->export session-》all sessions
(3)Fiddler**窗口布局**
*Fiddler菜单栏
Fiddler配置
Fiddler默认端口8888,(1024到65536)若端口被占用,手动配置端口号:Tools–Options–Connections
菜单栏tools--》options--》connections--》fiddler listens on port:8888
**工具条(工具栏的使用)
Winconfig:fiddler5新增的功能,配置应用程序抓包
消息:给对应请求添加备注comments保存导出,save--》All Session、Export Sessions
Replay:点击重放,选择需要重放的接口连接,重放攻击,点击快捷键r;自定义重放多次shift+R;串行而非并发,jmeter可并发;
Remove删除:Ctrl+x删除所有绘画列表,shift+delete删除未选中的请求
Go:断点,左下角All Process后面点击空白区域可设置请求前断点
Stream:流模式,和浏览器请求类似,及时返回请求;缓冲模式可集合返回请求;
Decode:解码,可在响应单点解码,也可以点击全部解码。
Keep All Session:设置保持会话的数量
Any Process:选择监听的程序,例如点击后+号选择某个浏览器或应用程序
Find:查找Ctrl+f,快速定位到请求;如,抓取登录截面某段文字进行标记
Save:保存会话列表所有请求;
Add a screenshot to the capture:添加捕获截图(截图)
A simple timer:计时器,右键取消
Browse:快捷打开浏览器
Clear Cache:清除浏览器缓存
TextWizard:编码、解码;如MD5解密,URL编码解码
Tearoff:分离面板
MSDN:微软开发者网站搜索
Online:本机的在线信息,如ip
***Session List监控面板(会话列表)
Fididler抓取到的每条http请求(每一条称为一个session)
主要包含的请求的ID编号、状态码、协议、主机名、URL、内容类型、body大小、进程信息、自定义备注等信息
响应头 | 描述 |
# | Id,获取Http Request的顺序,从1开始,以此递增 |
Result | HTTP状态码 |
Protocol | 请求使用的协议,如HTTP/HTTPS/FTP等 |
Host | 请求地址的主机名 |
URL | 请求资源的位置,统一资源定位符 |
Body | 请求的大小 |
Caching | 请求缓存过期时间或者缓存控制值 |
Content-Type | 请求响应的类型 |
Process | 发送此请求的进程id |
Comments | 允许用户为此会话添加备注 |
Costom | 允许用户设置自定义值,列右键选择自定义列 |
扩展:添加一列如server ip
1.打开Fiddler工具,Rules->Customize rules 2.Ctrl+F搜索"static function Main()"方法,添加以下代码:FiddlerObject.UI.lvSessions.AddBoundColumn("ServerIP", 120, "X-HostIP");
****命令行+状态栏
命令行--QuickExec(快速执行命令)
输入Help学习更多命令
- bpu 127.0.0.1(bpu---断点,包含127.0.0.1的请求设置断点)
- 取消---》bpu ---》回车;
- >40 (选择大于40 字节);
- ?sometext--(url包含sometext的高亮显示),?User(高亮URL包含user)
状态栏
Capturing设置代理和取消代理
All processes 选择所有进程
空白(断点功能):点击一次请求前断点,点击两次响应后断点,点击三次取 消断点
选择会话数量:1/2( 两个选择一个)
附加信息:显示地址等详细信息
*****辅助标签+工具栏
Statistics:统计,http请求性能和其他数据分析,如DNS解析时间消耗,客户端连接时间,TCP/IP连接时间消耗等(统计性能相关信息)
Inspectors:检查器,双击以如下格式显示
- header,以层级或分类形式查看header
- TextView,文本形式查看
- Syntaxview,语法格式查看展示(请求为xml,json)
- Webforms,默认表单形式(form表单之间的请求)
- Hexview,16进制查看
- Auth,鉴权相关
- Cookies,展示cookies
- Raw,原生的源码形式查看
AutoResponder:自动响应器,可用于拦截某一请求,设置各种各样的规则; 操作如下:
生产环境---拦截--重定向到本地资源--->指定响应
1,使用fiddler的内置响应,自定义响应
Add rule 添加规则,替换资源,编辑响应(做极端测试)
ctrl+f5去缓存刷新;find a file...指定资源路径
返回指定响应的资源或文件,右键编辑响应内容edit response
也就是mock功能
Composer:设计者,设计请求报文,报文篡改,进行接口测试;
拖动多个请求至composer,选择对应请求进行回放;
Filter:过滤器,主机的过滤、进程的过滤、请求头的过滤、断点的过滤、响应状态码的过滤、响应类型和大小的过滤
弱网测试
Simulate
三、HTTPS**协议**
Hypertext Transfer Protocol Secure 超文本传输安全协议,端口号443, HTTPS 协议是由 HTTP 加上 SSL/TLS 协议构建的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。设计目标主要有三个:
1 数据保密性
2 数据完整性
3 身份校验安全性
应用层 | HTTP | HTTPS |
SSL/TLS | ||
传输层 | TCP | TCP |
网络层 | IP | IP |
http | https |