之前接过一个爬虫需求:抓取某个 Web 页面的数据,对方接口是 HTTPS,用 Python 的 requests 直接请求被拒。排查后发现是服务端做了 SSL 证书验证,默认的 requests 行为走不通。后来又陆续试了几种方案,发现 HTTPS 爬虫开发中最耗时间的往往不是写解析逻辑,而是搞清楚接口的请求参数和加密方式。

浏览器开发者工具

最简单的方式是用浏览器 DevTools 的 Network 面板看接口请求。打开开发者工具 → Network → XHR/Fetch,刷新页面,就能看到所有请求的 URL、请求头、参数和响应。大多数情况下,从这里拿到的信息就足够写爬虫了。

但有些场景下浏览器不够用:接口返回的数据经过前端二次加密、请求头里带了动态 token 或者签名参数、或者目标页面需要登录态的 Cookie。这些信息光靠浏览器看不够直观,需要结合抓包工具来分析。

Charles 做代理抓包

Charles 是爬虫开发者常用的工具。把电脑设置成代理服务器,浏览器的流量经过 Charles,可以看到完整的请求和响应数据。对于 HTTPS 接口,安装并信任 Charles 的 SSL 证书后,加密流量也能解密查看。Charles 的 Repeat 和 Advanced Repeat 功能可以重放请求,方便调试参数。

不过 Charles 在几个场景下会碰到限制:一是目标做了 SSL Pinning 时代理证书被拒绝,二是非 HTTP 协议(如 TCP Socket)的流量 Charles 看不到,三是在 Windows 上配置证书步骤稍微多一些。

Fiddler 的脚本扩展

Fiddler 是 Windows 上主流的抓包工具,和 Charles 类似但有几个差异点。Fiddler 内置了 FiddlerScript,可以用 C# 写脚本修改请求和响应、设置断点、自动重定向。对爬虫开发来说,写一段脚本自动替换响应内容、注入 Cookie 或者修改请求参数,比手动操作效率高。Fiddler 的弱点同样是不支持 SSL Pinning 场景。

SniffMaster 在爬虫场景下的作用

SniffMaster 在爬虫开发中主要用在几类场景。一是目标 App 或 PC 端做了 HTTPS 双向证书验证时,Charles 和 Fiddler 的代理模式会失效,SniffMaster 的暴力抓包模式通过 USB 直连设备走底层通道,不依赖代理证书,能正常抓取和解密 HTTPS 数据,适合分析带有证书验证的客户端请求。

二是抓取非 HTTP 协议的数据。有些爬虫需要分析 TCP 或 UDP 层面的数据交互(比如游戏通信协议、自定义二进制协议),SniffMaster 的数据流抓包模式可以捕获这些流量,并导出为 pcap 文件用 Wireshark 做进一步分析。

三是跨平台场景。Charles 和 Fiddler 主要跑在 Mac 和 Windows,SniffMaster 的代理抓包模式在这两个平台上都能用,而且证书安装有操作引导,第一次配置少踩一些坑。

爬虫开发过程中的抓包调试,Charles 和 Fiddler 覆盖日常场景,遇到证书验证、非 HTTP 协议或跨平台需求时备一个 SniffMaster 就够了。