[Python爬虫] 四、数据抓取之HTTP/HTTPS抓包工具Fiddler

柠檬树下的少年 6天前   阅读数 8 0

往期内容提要:


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) 部分
  1. Headers —— 显示客户端发送到服务器的 HTTP 请求的 header,显示为一个分级视图,包含了 Web 客户端信息、Cookie、传输状态等。
  2. Textview —— 显示 POST 请求的 body 部分为文本。
  3. WebForms —— 显示请求的 GET 参数 和 POST body 内容。
  4. HexView —— 用十六进制数据显示请求。
  5. Auth —— 显示响应 header 中的 Proxy-Authorization(代理身份验证) 和 Authorization(授权) 信息.
  6. Raw —— 将整个请求显示为纯文本。
  7. JSON - 显示JSON格式文件。
  8. XML —— 如果请求的 body 是 XML 格式,就是用分级的 XML 树来显示它。
响应 (Response) 部分
  1. Transformer —— 显示响应的编码信息。
  2. Headers —— 用分级视图显示响应的 header。
  3. TextView —— 使用文本显示相应的 body。
  4. ImageVies —— 如果请求是图片资源,显示响应的图片。
  5. HexView —— 用十六进制数据显示响应。
  6. WebView —— 响应在 Web 浏览器中的预览效果。
  7. Auth —— 显示响应 header 中的 Proxy-Authorization(代理身份验证) 和 Authorization(授权) 信息。
  8. Caching —— 显示此请求的缓存信息。
  9. Privacy —— 显示此请求的私密 (P3P) 信息。
  10. Raw —— 将整个响应显示为纯文本。
  11. JSON - 显示JSON格式文件。
  12. XML —— 如果响应的 body 是 XML 格式,就是用分级的 XML 树来显示它 。

五、使用Fiddler进行HTTP断点调试

(1)Fiddler可以做到:
  1. 修改HTTP请求头信息。例如修改请求头的UA, Cookie, Referer 信息,通过“伪造”相应信息达到达到相应的目的(调试,模拟用户真实请求等)。

  2. 构造请求数据,突破表单的限制,随意提交数据。避免页面js和表单限制影响相关调试。

  3. 拦截响应数据,修改响应实体。

(2)两种方式设置断点:
  • 方式一:fiddler菜单栏->rules->automatic Breakpoints->选择断点方式,这种方式下设定的断点会对之后的所有HTTP请求有效。

有两个断点位置:

a. before response。也就是发送请求之后,但是Fiddler代理中转之前,这时可以修改请求的数据。

b.after response。也就是服务器响应之后,但是在Fiddler将响应中转给客户端之前。这时可以修改响应的结果。

  • 方式二:命令行下输入。Bpafter xxx或者bpv,bpu,bpm等设置断点(详见后文)。
(3)三种方式终止断点:
  1. 在inspector界面点击“run complete“即会终止本次HTTP请求的断点。

  2. 输入go命令,也会使得当前的请求跳过断点。

  3. 在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爬虫] 十、机器图像识别之文字、验证码识别
  • [Python爬虫] 十一、Scrapy 框架

如果您有任何疑问或者好的建议,期待你的留言与评论!

发布了79 篇原创文章 · 获赞 524 · 访问量 71万+

注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: