为什么用fiddler
接口测试一定要开口说接口文档事情(1. URI 2. 请求方法 3 参数(必选的还是可选)4. 响应)
在文档中信息不全的情况下,利用fiddler进行抓包
基于http协议的抓包工具,现在大部分接口都是基于HTTP协议开发
获取接口的详细的信息(http协议请求的头信息,请求的体信息,响应头信息,响应体信息)
获取相关参数的信息(参数放在哪(URL(query string),请求体(POST方法的时候会放在请求体))?用什么类型?(content-type))
获取断言的信息(响应头(认证信息,接口安全,响应码)和响应体(1. 对应的文本))
利用fiddler提供的代理机制 - 提供一个Http 服务,默认8888,浏览器的代理地址设置为fiddler的服务地址,就可以抓到包了
接口的顺序(要找接口的顺序,需要使用浏览器进行相关的业务的访问)
Fiddler
抓包工具,抓基于HTTP协议
缺少接口,不得以找接口
怎么找,找哪写内容,数据在哪,发送在哪,响应在哪
Content-Type - http 协议头部的内容,常用的类型有4个,内容的类型,浏览器/客户端与服务器之间进行数据交互的时候要告诉对方你的数据个格式
text/html
Content-Type: application/x-www-form-urlencoded
application/json
multipart/form-data - 上传文件
fidder接口分析过程
浏览器访问被测系统,操作业务功能
fiddler中找到相关操作接口
找接口的请求头部和,找到URI(接口URL),找到方法,找到接口相关的头部信息(cookie, content-type)
找参数相关的信息(1. key 参数的名称是什么)
找响应的相关信息,响应头部信息和响应体信息
找到断言的点
request url
request 方法
request header
request body
response header
response body
get/post
区别
get从服务获取数据,不带任何数据(request body)
post向服务器推送数据(传递数据,发送数据),可以带数据指的是在request body
Fiddler找的数据
接口 URL/接口/URI
接口方法
接口参数 - 20200918_144506_789.png
从登录响应数据里获取sessionid(大家的身份ID,也就是下次你访问系统的时候要带上这个ID,放在后边接口的header(请求头))
从响应的header或者body获取需要的数据
请求的数据
POST /testwnsales/user/login
header
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
参数
username=admin&password=wn@123&verifycode=0000
Set-Cookie: JSESSIONID=F2598E5F1F29299D536986C3E0540C7B; Path=/testwnsales; HttpOnly
Cookies
总结:
一个接口要完成一个请求要具备那些要素
方法
URL
请求头 - (Content-Type,Cookie)
请求体 - (空、参数)
要完成接口的一次测试需要具备哪些要素
方法
URL
请求头 - (Content-Type,Cookie)
请求体 - (空、参数)
响应头 - (断言响应头有没有我们需要的数据)
响应体 - (断言响应体有没有我们断言的数据)
响应码 - 响应码是不是我们需要的响应码 (包含在响应头部)
- 参数
request header
Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468
Cookie: JSESSIONID=24BBF1282761F4DAAB508658A07E2964;
request body
---------------------------acebdf13572468
Content-Disposition: form-data; name=“batchname”
GB20200907
---------------------------acebdf13572468
Content-Disposition: form-data; name=“batchfile”; filename=“testwoniusales.xls”
Content-Type: applicationnd.ms-excel
<@INCLUDE D:\lessonsconfigfiles\testwoniusales.xls@>
---------------------------acebdf13572468–
login后的sessionid
HTTP协议工作过程
从我们经常上网
输入网址,通过DNS获取IP地址
向IP地址服务器发送请求
与服务器建立tcp连接(三次握手)(重点应对面试)
传输数据
关闭连接
HTTP协议
超文本传输协议(看着是文本,是二进制字节流)json其实字符串({},[], :)
请求一次,响应一次(请求-响应模式)
无状态(简单易使用)
短链接(传完数据就断开连接,keep-alive)
HTTP方法
get从服务获取数据,不带任何数据(request body),get可以带参数,参数放在URL当中
post向服务器推送数据(传递数据,发送数据),可以带数据指的是在request body
Content-Type
http 协议头部的内容,常用的类型有4个,内容的类型,浏览器/客户端与服务器之间进行数据交互的时候要告诉对方你的数据个格式
text/html
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
application/json
multipart/form-data - 上传文件(文件上传变成了2进制)
HTTP协议组成
请求行 - 方法 URL 协议版本
请求头部 - 请求头 header (方法请求时候需要的关键的字段,Cookie, Content-Type)
空行
请求数据 - 请求两个(URL传参数,请求体传参数)
断言的准则 - 通过什么数据进行断言,最保险(1. 响应码 2. 响应文本 3 调用相关的接口)
HTTP状态码
HTTP响应的第一行是状态行,依次是HTTP版本号, 3位数字组成的状态码,以及描述状态的短语 彼此由空格分隔
1xx 消息 - 请求已被服务接收,继续处理
2xx 成功 - 请求已经成功服务器接收,继续处理
3xx 重定向 - 需要后续的操作才能完成这请求
4xx 请求错误 - 请求很有语法错误或者无法被执行
5xx 服务错误 - 服务器在处理某个正确的请求事发生了错误(很有可能由bug)
Cookie与Session
类似地方:帮助我们可以记录状态(会话状态),判断是谁,依赖进行权限的控制,有没有访问权限
Cookie
实在硬盘实际存在的东西就一个文件,或者是一块数据,浏览器帮助我们处理(用户名,密码,域名)
Cookie不能跨域名
浏览器看到Set-Cookie字段,将此字段的内容保存到本地
Cookie的内容主要包括(名字,值,过期时间,路径和域)
Session
-
Seesion是基于Cookie实现的,它利用一个session把用户的敏感数据隐藏起来, Session在客户端是通过Cookie存储的, Seesion是通过Set-Cookie这个字段传给客户端
-
实现方式
客户端发起请求
服务端检查header,发现没有Cookie,生成SessionID
服务端返回报文中增加Set-Cookie字段,把sessionid带上发给客户端
客户端收到报文中并把sessionid存储,下次发送时候带上该值
服务器读取sessionid,如何session是有效的,通过session可以得到对应用户的隐私信息,如,id,email,银行卡等等
总结一下
Cookie
服务器通过Response-Header的Set-Cookie给客户端一段字符串
客户端每次访问相同的域名的系统时,带上这个字符串,服务器可以通过这个串字符串去读取客户端的信息
客户端在一段时间内保存这个Cookie
Cookie默认在用户关闭页面后失效,但是后台代码可以任意设置Cookie的过期时间
Session
-
将sessionid通过Cookie发给客户端
-
客户端访问服务器时,服务器读取sessionid
-
服务器有一块内存用来存储所有session(mysql, file, redis)
-
通过session可以找到对应的用户数据
Session与Cookie区别
Session依赖于Cookie实现的
Cookie存在于客户端,Session存储在服务端
Session和cookie都是为了实现HTTP请求中带上客户端状态的方法,
有效期不同: Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效。
HTTPS
HyperText Transfer Protocol over Secure Socket layer
HTTP+SSL/TLS HTTP下加入SSL层,HTTPS的安全基础是SSL,对数据进行加密,
SSL(Secure Socket Layer)安全套接字层,为数据通讯提供安全支持
TLS (Transport Layer Security 传输层安全)其前身是SSL
加密算法
对称加密(用什么方法加密就用什么方法解密)
DES、AES-GCM
非对称加密
RSA(公钥,私钥)、DSA、
哈希算法
将任意长度的信息转为较短的固定长度的值,通常器长度要比信息小的多,且算法不可逆(不可反推)
MD5
防止内容不修改
数字签名
签名就是在信息的后面加上一段内容 - 信息经过hash后的值,可以这名信息没有被修改过。
hash值一般都会加密后(也就是签名)再和信息一起发送,保证整个hash不被修改
fidder设置抓取https协议
action–导出到桌面证书
桌面安装证书
电脑:需要关闭防火墙,退出杀毒软件
如果要重置证书:action第六个,再重新安装
二.手机端怎么抓取
想要Fiddler抓取移动端设备的数据包,其实很简单,先来说说移动设备怎么去访问网络,看了下面这张图,就明白了。
可以看得出,移动端的数据包,都是要走wifi出去,所以我们可以把自己的电脑开启热点,将手机连上电脑,Fiddler开启代理后,让这些数据通过Fiddler,Fiddler就可以抓到这些包,然后发给路由器(如图):
打开Wifi热点,让手机连上(我这里用的360wifi,其实随意一个都行)
2. 打开Fidder,点击菜单栏中的 [Tools] –> [Fiddler Options]
3. 点击 [Connections] ,设置代理端口是8888, 勾选 Allow remote computers to connect, 点击OK
4. 这时在 Fiddler 可以看到自己本机无线网卡的IP了(要是没有的话,重启Fiddler,或者可以在cmd中ipconfig找到自己的网卡IP)
5. 在手机端连接PC的wifi,并且设置代理IP与端口(代理IP就是上图的IP,端口是Fiddler的代理端口8888)
访问网页输入代理IP和端口,下载Fiddler的证书,点击下图FiddlerRoot certificate
【注意】:如果打开浏览器碰到类似下面的报错,请打开Fiddler的证书解密模式(Fiddler 设置解密HTTPS的网络数据)
No root certificate was found. Have you enabled HTTPS traffic decryption in Fiddler yet?
7. 安装完了证书,可以用手机访问应用,就可以看到截取到的数据包了。(下图选中是布卡漫画的数据包,下面还有QQ邮箱的)
4. Fiddler 内置命令与断点
Fiddler还有一个藏的很深的命令框,就是眼前,我用了几年的Fiddler都没有发现它,偶尔在别人的文章发现还有这个小功能,还蛮好用的,整理下记录在这里。
FIddler断点功能就是将请求截获下来,但是不发送,这个时候你可以干很多事情,比如说,把包改了,再发送给服务器君。还有balabala一大堆的事情可以做,就不举例子了。