[Python爬虫] 四、数据抓取之HTTP/HTTPS抓包工具Fiddler
往期内容提要:
- [Python爬虫] 一、爬虫原理之HTTP和HTTPS的请求与响应
- [Python爬虫] 二、爬虫原理之定义、分类、流程与编码格式
- [Python爬虫] 三、数据抓取之Requests HTTP 库
Fiddler是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP请求。 点此下载 Fiddler
一、HTTP代理神器Fiddler工作原理
Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888.
二、Fiddler抓取HTTPS设置
(1) 安装并启动Fiddler;
(2) 对Fiddler进行设置:
- 打开工具栏->Tools->Options->HTTPS选项卡;
- 选中Capture HTTPS CONNECTs (捕捉HTTPS连接);
- 选中Decrypt HTTPS traffic(解密HTTPS通信);/li>
- 另外我们要用Fiddler获取本机所有进程的HTTPS请求,所以中间的下拉菜单中选中...from all processes (从所有进程);
选中下方Ignore server certificate errors(忽略服务器证书错误);
为 Fiddler 配置Windows信任这个根证书解决安全警告:Trust Root Certificate(受信任的根证书);
(3) Fiddler 主菜单 Tools -> Options…-> Connections选项卡
- 选中Allow remote computers to connect(允许远程连接);
Act as system proxy on startup(作为系统启动代理);
(4) 重启Fiddler,使配置生效(很重要)。
三、Fiddler 如何捕获Chrome的会话
设置好后,本机HTTP通信都会经过127.0.0.1:8888代理,会被Fiddler拦截到。因此运行即可捕获,如无法正常捕获:
(1) 安装SwitchyOmega 代理管理 Chrome 浏览器插件
(2) 如图所示,设置代理服务器为127.0.0.1:8888
(3) 通过浏览器插件切换为设置好的代理
四、Fiddler界面
主界面中主要包括四个常用的块:
1.Fiddler的菜单栏,上图绿色部分。包括捕获http请求,停止捕获请求,保存http请求,载入本地session、设置捕获规则等功能。
2.Fiddler的工具栏,上图红色部分。包括Fiddler针对当前view的操作(暂停,清除session,decode模式、清除缓存等)。
3.web Session面板,上图黄色区域,主要是Fiddler抓取到的每条http请求(每一条称为一个session),主要包含了请求的url,协议,状态码,body等信息,详细的字段含义如下图所示:
4.详情和数据统计面板。针对每条http请求的具体统计(例如发送/接受字节数,发送/接收时间,还有粗略统计世界各地访问该服务器所花费的时间)和数据包分析。
- 如inspector面板下,提供headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息;其分为上下两个部分,上半部分是请求头部分,下半部分是响应头部分。对于每一部分,提供了多种不同格式查看每个请求和响应的内容。JPG 格式使用 ImageView 就可以看到图片,HTML/JS/CSS 使用 TextView 可以看到响应的内容。Raw标签可以查看原始的符合HTTP标准的请求和响应头。Auth则可以查看授权Proxy-Authorization 和 Authorization的相关信息。Cookies标签可以看到请求的cookie和响应的set-cookie头信息。
- 而composer面板下,则可以模拟向相应的服务器发送数据的过程,也可以粘贴一次请求的raw http headers,达到模拟请求的目的。
- Filter标签则可以设置Fiddler的过滤规则,来达到过滤http请求的目的。最简单如:过滤内网http请求而只抓取internet的http请求,或则过滤相应域名的http请求。Fiddler的过滤器非常强大,可以过滤特定http状态码的请求,可以过滤特定请求类型的http请求(如css请求,image请求,js请求等),可以过滤请求报文大于或则小于指定大小(byte)的请求。
- AutoResponder面板是Fiddler比较重要且比较强大的功能之一。可用于拦截某一请求,并重定向到本地的资源,或者使用Fiddler的内置响应。可用于调试服务器端代码而无需修改服务器端的代码和配置,因为拦截和重定向后,实际上访问的是本地的文件或者得到的是Fiddler的内置响应。因此,如果要调试服务器的某个脚本文件,可以将该脚本拦截到本地,在本地修改完脚本之后,再修改服务器端的内容,这可以保证,尽量在真实的环境下去调试,从而最大限度的减少bug发生的可能性。
请求 (Request) 部分
- Headers —— 显示客户端发送到服务器的 HTTP 请求的 header,显示为一个分级视图,包含了 Web 客户端信息、Cookie、传输状态等。
- Textview —— 显示 POST 请求的 body 部分为文本。
- WebForms —— 显示请求的 GET 参数 和 POST body 内容。
- HexView —— 用十六进制数据显示请求。
- Auth —— 显示响应 header 中的 Proxy-Authorization(代理身份验证) 和 Authorization(授权) 信息.
- Raw —— 将整个请求显示为纯文本。
- JSON - 显示JSON格式文件。
- XML —— 如果请求的 body 是 XML 格式,就是用分级的 XML 树来显示它。
响应 (Response) 部分
- Transformer —— 显示响应的编码信息。
- Headers —— 用分级视图显示响应的 header。
- TextView —— 使用文本显示相应的 body。
- ImageVies —— 如果请求是图片资源,显示响应的图片。
- HexView —— 用十六进制数据显示响应。
- WebView —— 响应在 Web 浏览器中的预览效果。
- Auth —— 显示响应 header 中的 Proxy-Authorization(代理身份验证) 和 Authorization(授权) 信息。
- Caching —— 显示此请求的缓存信息。
- Privacy —— 显示此请求的私密 (P3P) 信息。
- Raw —— 将整个响应显示为纯文本。
- JSON - 显示JSON格式文件。
- XML —— 如果响应的 body 是 XML 格式,就是用分级的 XML 树来显示它 。
五、使用Fiddler进行HTTP断点调试
(1)Fiddler可以做到:
修改HTTP请求头信息。例如修改请求头的UA, Cookie, Referer 信息,通过“伪造”相应信息达到达到相应的目的(调试,模拟用户真实请求等)。
构造请求数据,突破表单的限制,随意提交数据。避免页面js和表单限制影响相关调试。
拦截响应数据,修改响应实体。
(2)两种方式设置断点:
- 方式一:fiddler菜单栏->rules->automatic Breakpoints->选择断点方式,这种方式下设定的断点会对之后的所有HTTP请求有效。
有两个断点位置:
a. before response。也就是发送请求之后,但是Fiddler代理中转之前,这时可以修改请求的数据。
b.after response。也就是服务器响应之后,但是在Fiddler将响应中转给客户端之前。这时可以修改响应的结果。
- 方式二:命令行下输入。Bpafter xxx或者bpv,bpu,bpm等设置断点(详见后文)。
(3)三种方式终止断点:
在inspector界面点击“run complete“即会终止本次HTTP请求的断点。
输入go命令,也会使得当前的请求跳过断点。
在rules->auto breakpoint中disabled断点即可。
六、Fiddler内置命令
Fiddler提供了一系列内置的函数用于筛选和操作session。输入命令的位置在web session管理面板的下方(通过快捷键alt+q可以focus到命令行)。
命令名称 | 作用 |
---|---|
select | 选择所有相应类型(指content-type)为指定类型的HTTP请求 |
allbut | 选择所有响应类型不是给定类型的HTTP请求 |
?text | 选择所有 URL 匹配问号后的字符的全部 session |
>size <size | 选择响应大小大于某个大小(单位是b)或者小于某个大小的所有HTTP请求 |
=status | 选择响应状态等于给定状态的所有HTTP请求。 |
@host | 选择包含指定 HOST 的全部 HTTP请求。例如:@csdn.net |
Bpafter Bps, bpv, bpm, bpu | 批量设置断点 |
特别说明:
(1) select命令
选择所有相应类型(指content-type)为指定类型的HTTP请求,如选择图片,使用命令select image.而select css则可以选择所有相应类型为css的请求,select html则选择所有响应为HTML的请求。
(2) allbut命令
allbut命令用于选择所有响应类型不是给定类型的HTTP请求。如allbut image用于选择所有相应类型不是图片的session(HTTP请求),该命令还有一个别名keeponly.需要注意的是,keeponly和allbut命令是将不是该类型的session删除,留下的都是该类型的响应。因此,如果你执行allbut xxxx(不存在的类型),实际上类似与执行cls命令(删除所有的session, ctrl+x快捷键也是这个作用)。
(3) Bpafter, Bps, bpv, bpm, bpu
这几个命令主要用于批量设置断点:
Bpafter xxx: 中断 URL 包含指定字符的全部 session 响应;
Bps xxx: 中断 HTTP 响应状态为指定字符的全部 session 响应;
Bpv xxx: 中断指定请求方式的全部 session 响应;
Bpm xxx: 中断指定请求方式的全部 session 响应。等同于bpv xxx;
Bpu xxx:与bpafter类似。
当这些命令没有加参数时,会清空所有设置了断点的HTTP请求。
后期内容提要:
- [Python爬虫] 五、数据提取之正则表达式re模块
- [Python爬虫] 六、数据提取之XPath与lxml类库
- [Python爬虫] 七、结构化数据提取之JSON与JsonPATH
- [Python爬虫] 八、动态HTML处理之Selenium与PhantomJS
- [Python爬虫] 九、机器视觉与机器图像识别之Tesseract
- [Python爬虫] 十、Scrapy 框架
如果您有任何疑问或者好的建议,期待你的留言与评论!
[Python爬虫] 四、数据抓取之HTTP/HTTPS抓包工具Fiddler相关推荐
- Python爬虫——Ajax数据爬取
前言 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样,在浏览器中可以看到正常显示的页面数据,但使用requests得到的结果并没有.这是因为在requests获得 ...
- python爬虫之数据爬取项目实例
python爬虫之数据爬取项目实例 一.scrapy数据爬取 (一)前期准备 (二)目标: (三)步骤: 1.创建项目: 2.创建爬虫: 3.打开项目: 4.创建启动程序: 5.编写爬虫: 6.启动测 ...
- python爬虫四:爬取贴吧数据
# -*- coding: utf-8 -*- import requests import time from bs4 import BeautifulSoupimport io import sy ...
- kali burpsuit抓取不了https的包
可能有很多老铁都会遇到这问题,废话少说,分享一波(格式啥的就不用在意啦) 先设置一波代理 抓https的包,发现抓取不了 导入证书,注意右边,别看走眼了(方法不唯一,也可以抓包获取证书,麻烦) 保存( ...
- python爬虫成长之路(一):抓取证券之星的股票数据
python爬虫成长之路(一):抓取证券之星的股票数据 获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇 ...
- Python爬虫之XPath基础教程:用代码抓取网页数据
Python爬虫之XPath基础教程:用代码抓取网页数据 在网络时代,网页数据是获取信息和进行分析的最重要的来源之一.Python的爬虫技术让我们可以轻松抓取网页数据,并进行数据处理.XPath是一种 ...
- [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) —— 数据的持久化——使用MongoDB存储爬取的数据
上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) -- 编写一个基本的 Spider 爬取微博用户信息 在上一篇博客中,我们已经新建了一个爬虫应用,并简单实现了爬取一位微 ...
- Python爬虫系列之爬取微信公众号新闻数据
Python爬虫系列之爬取微信公众号新闻数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发 > 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学习交流 ...
- Python爬虫系列之爬取某奢侈品小程序店铺商品数据
Python爬虫系列之爬取某奢侈品小程序店铺商品数据 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发> 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学 ...
最新文章
- 2021-2027年中国市医疗电子场投资分析及前景预测报告
- 英伟达CEO黄仁勋获芯片行业最高荣誉:他颠覆了计算!
- Webpack 4 学习09(打包生成html)
- nmap之扫描端口(附加hping3隐藏扫描)
- 播放RTMP协议的流媒体的几种选择
- 128.Two Sum
- java bean 工厂模式_通过annotation(注解)实现BeanFactory工厂模式(三)
- Highcharts改Y轴的刻度值
- 关于软件测试工程师所应该具备的能力,就业前景还有适合女生从事吗?
- 使用js实现鼠标放置时显示下拉列表
- 苹果sf字体_字体基础知识
- c语言冒泡排序获取最小值,C语言 冒泡排序算法详解及实例
- 我的毕业论文————面向对象的软件测试
- java软件工程师是做什么的_JAVA软件工程师是做什么的?
- 以太网通信协议UDP
- 跳跃表(SkipList)
- 如何解决电脑C盘不能扩展问题
- 神级编程网站,堪称程序员的充电站,我给你找好了不能错过
- Android开发高级进阶内涵段子APP项目实战视频教程
- 5.brackets 快捷键 有大用
热门文章
- 宝宝与父母间的纽带——毛绒玩具
- C++开发常用工具“群英会”
- 如何判断一个用户是否在O365上还是本地Exchange服务器上
- 解决知乎live无法下载的问题
- 豆粕止步5连跌关注USDA报告,甲醇认沽大倍,甲醇05-09季节性反套2022.3.31
- ORA-01578: ORACLE 数据块损坏 之奇妙处理 DBV
- 关于牛客网代码题 数据读取问题的 小白指南
- js jquery 实现 排班,轮班,日历,日程。使用fullcalendar 插件
- 攻击方法与工业控制系统安全
- 亚信安全服务器深度安全防护系统怎么样,亚信安全服务器深度安全防护系统即服务(DSaaS)为云端用户筑起安全壁垒...