Fiddler:学习scrapy,不只是满足于网页上爬去信息的成功乐趣,现在开始接触爬去手机信息了,不好解决,知道过程不会轻松,但自己想去尝试。QAQ
写这篇博客是基于以下的几位大神学习笔记,我只是做下总结,里面会有具体的图片信息:
https://blog.csdn.net/playstudy/article/details/18921967
https://blog.csdn.net/a877415861/article/details/79447440
https://www.cnblogs.com/miantest/p/7289694.html
Fiddler:基础知识
Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口默认为8888,我们也可以通过设置进行修改。
代理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代理服务器会将数据包进行拦截,代理服务器再冒充客户端发送数据到服务器;
同理,服务器将响应数据返回,代理服务器也会将数据拦截,再返回给客户端。
Fiddler可以抓取支持http代理的任意程序的数据包,如果要抓取https会话,要先安装证书。
HTTP协议
要分析Fiddler抓取的数据包,我们首先要熟悉HTTP协议。HTTP即超文本传输协议,是一个基于请求与响应模式的、无状态的、应用层的协议,绝大多数的Web开发,
都是构建在HTTP协议之上的Web应用。
HTTP的工作过程:当我们请求一个超链接时,HTTP就开始工作了,客户端先发送一个请求到服务器,请求内容包括:协议版本号、请求地址、请求方式、请求头和请求参数;
服务器收到请求后做相应的处理,并将响应数据返回到客户端,响应内容包括:协议版本号、状态码和响应数据。前端根据响应数据做相应的处理,就是最终我们看到的内容
Fiddler的安装
1.下载安装包:"http://www.downza.cn/soft/234727.html"
2.下载.net framework 4.6.2 x64(Fiddler Orachestra Beta会需要):"https://www.fixdown.com/soft/3178.html"
Fiddler的配置(手机和电脑连接同一网络)
1)Fiddler, Tools-> Fiddler Options
HTTPS:
1.选中"Fiddler, Tools-> Fiddler Options"——Fiddler就可以截获HTTPS请求
2.选中"Ignore server certificate errors".
Connections
1.选中"Allow remote computers to connect". 是允许别的机器把HTTP/HTTPS请求发送到Fiddler上来
2)查看本机Ip
ipconfig(192.168.5.147)
3)IPhone设置代理
设置 -> 无线局域网 -> 已连接网络旁边的蓝色感叹号 -> 设置代理
服务器:192.168.5.147
端口:8888
4)打开IPhone 的Safari, 访问 http://192.168.5.147:8888,点"FiddlerRoot certificate" 然后安装证书
5)检查是否设置成功
Iphone:Safari输入:"http://www.cr173.com/z/qvodplayer/."查看Fiddler能否捕获
Fiddler使用
Fiddler支持断点调试技术,当你在软件的菜单—rules—automatic breakpoints选项选择before request,或者当这些请求或响应属性能够跟目标的标准相匹配,
Fiddler就能够暂停Http通讯,并且允许修改请求和响应。这种功能对于安全测试是非常有用的,当然也可以用来做一般的功能测试,因为所有的代码路径都可以用来演习。
通过显示所有的Http通讯,Fiddler可以轻松地演示哪些用来生成一个页面,通过统计页面(就是Fiddler左边的那个大框)用户可以很轻松地使用多选,
来得到一个WEB页面的“总重量”(页面文件以及相关js,css等)你也可以很轻松地看到你请求的某个页面,总共被请求了多少次,以及多少字节被转化了。
用户可以加入一个Inspector插件对象,来使用.net下的任何语言来编写Fiddler扩展。
RequestInspectors 和 ResponseInspectors提供一个格式规范的,或者是被指定的(用户自定义)Http请求和响应视图。
Fiddler软件信息栏
基本信息:
#:顺序号,按照抓包的顺序从1递增
Result:HTTP状态码
Protocol:请求使用的协议,如HTTP/HTTPS/FTP等
HOST:请求地址的主机名或域名
URL:请求资源的位置
Body:请求大小
Caching:请求的缓存过期时间或者缓存控制值
Content-Type:请求响应的类型
Process:发送此请求的进程ID
Comments:备注
Custom:自定义值
Fiddler的QuickExec的简单使用
1、cls cls清屏命令,输入该命令可以清空会话列表中所有会话cls清屏命令,输入该命令可以清空会话列表中所有会话 2、select 通过select命令可以选择出某一类型HTTP会话的功能。 比如选择出所有的html类型的HTTP会话,命令:select html 比如选择出所有的图片类型的HTTP会话,命令:select image 3、? ?命令可以查找出网址中包含某些字符的会话信息,比如“?baidu”可以查找出网址中包含“baidu”字符串的会话信息。 4、help 执行该命令可以打开Fiddler官方使用手册。 5、>,< 请求body大小的范围 6、= 匹配HTTP返回码(=200) 7、@ @后面跟Host,可以匹配域名(@www.baidu.com) 8、dump 将所有请求打包成saz压缩包,保存到“我的文档Fiddler2Captures”目录下 9、start 开始监听请求 10、stop 停止监听请求
Insepector:请求(即客户端发出的数据)和响应(服务器返回的数据)
HTTP Request 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值发送给服务器
Transport 头域:
Connection:当网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接是否关闭。keep-alive表示不会关闭,
客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接;close表示关闭,客户端再次访问这个服务器上的网页,需要重新建立连接。
HOST:主机名或域名,若没有指定端口,表示使用默认端口80.
HTTP Response Headers:
协议: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请求是将请求参数放在url中,而POST请求一般是将请求参数放在请求body中。
Fiddler断点功能
通信过程中,在传递信息的中间进行修改后在传递,那么就可以使用Fiddler的断点功能。
1、使用Fiddler的断点,可以实现的功能:
拦截响应数据,并进行相应修改。
修改请求数据中的头信息,实现相应功能,比如模拟用户请求等功能。
构建请求数据,随意进行数据提交。
2、Fiddler断点功能分为两种类型:
响应时断点 Response断点
请求时断点 Resquest断点
设置响应断点方法有两种:
通过可视化操作设置
- Before Requests:拦截所有发送给服务器的请求
- After Responses:拦截所有服务器返回的session
- Disabled :取消断点
1.中断设置
单击Fiddler中的Rules–>Automatic Breakpoints–>After Responses
2.取消响应中断设置
单击Fiddler中的Rules–>Automatic Breakpoints–>Disabled
通过命令去设置。
1.响应断点
bpafter www.baidu.com 对www.baidu.com进行响应断点
bpafter 取消响应断点
2.请求断点
bpu www.baidu.com 对www.baidu.com进行请求断点
bpu 取消请求断点
遇到的问题:
1)执行fiddler文件下fiddler.exe 提示下载.net framework
2)解决Fiddler "creation of the root certificate was not successful”
1.cd "d:Program FilesFiddler"--进入Fiddler所在文件
2.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 09/05/2020(大于当前时间)
3)配置浏览器代理:(开启fiddler时,该程序会自动配置浏览器代理,导致无法无法上网)
1.chrome -> 设置 -> 高级 -> 打开代理设置 -> 连接 -> 局域网设置 -> 代理服务器:不勾选"为LAN使用代理服务器"
地址:192.168.5.147 端口:8888
2.Fiddler软件会提示"The system proxy was changed.Click to reenable capturing",点击之后,Fiddler会设置浏览器代理
4)只能捕获HTTP,而不能捕获HTTPS的解决办法
1. 先把IPhone上所有的Fiddler证书删除 (拿出IPhone,点”设置“->“通用”->"描述文件")
2. 安装上面的方法,重新安装Fiddler证书