为爬虫获取登录cookies:charles工具的使用

Python爬虫 2018-12-03 0:39:10 阅读(9919) 评论(0)

“工欲善其事,必先利其器”。前面我们提到分析登录过程的工具,今天,我们就来介绍其中一款工具——Charles的使用。

Charles debug抓包工具

1. Charles 简介

好多人把它叫做抓包工具,好像也没什么不对。但官方把它定义为一个代理(Proxy)。我们看看官方是怎么说的:

Charles是一个HTTP代理(或HTTP监视器,或反向代理),可以让开发者观察到他们的机器和互联网之间的所有HTTP和SSL/HTTPS流量。这包括请求,响应和HTTP标头(包含cookie和缓存信息)。

Charles 使用Java开发,支持Windows、macOS、Linux操作系统:

Charles支持的操作系统

并且,让Windows和macOS用户有福的是,它支持系统代理设置,也就是用它设置为系统代理,就不用再去设置浏览器代理了。老猿我就比较悲催了,用Ubuntu就没这个福利了,启动Charles后还有设置Chrome的代理。好在我用SwitchyOmega(你懂的),新增一个代理指向Charles也不是什么难事儿。

2. Charles的下载安装

我们去官网下载一个免费试用版,有30天的试用期,不过每次运行半小时就不能使用了,需要重新运行charles。
选择适合你的系统的版本下载安装即可。安装过程是傻瓜式的,一路点下一步即可。

3. Charles的配置:http 代理

以Windows为例(macOS类似)
运行Charles,在Windows系统下,已经默认设置为系统代理,可以在左边栏看到已经记录的http请求(如果有请求的话)。点击菜单“Proxy”可以看到默认的系统设置。如下图所示:

Charles Windows设置

图中绿色方框就是已经选中Windows Proxy(系统代理),橙色框中便是它记录的http请求。点击红框中的“Proxy Settings…”菜单,可以修改代理端口,默认的是8888:

Charles HTTP代理端口

Windows下的Chrome浏览器默认使用系统代理,这时候你用Chrome打开网页就可以看到Charles记录的请求了。

Ubuntu(Linux)下配置Chrome浏览器
Ubuntu下就没有前面图中类似绿色框中的”Linux Proxy”可以选择,我们需要自己去Chrome浏览器设置代理,然而Chrome是使用系统代理的。于是,我们有两种选择来设置Chrome使用Charles的代理:

(1) 去系统设置里面把系统代理设置成Charles的8888端口
打开 System Settings -> Network,选择 Network proxy,如图所示:

Ubuntu 系统代理设置

(2)像老猿我这样使用SwitchyOmega插件
打开插件的配置页面,点击左侧的New profile按钮,填写名称并创建:

SwitchyOmega新建代理

填写代理的地址为 127.0.0.1,端口为8888 :

SwitchyOmega代理配置

填写后,左侧的 Apply changes 按钮变成绿色,点击它保存配置。
以后需要使用Charles和Chrome分析网站时,只需选择SwitchyOmega 的这个代理即可。

Ubuntu(Linux)下配置Firefox浏览器

打开 Firefox 的 Preference -> General -> Network Settings 进行代理配置:

Firefox 代理设置

看上图,同样对于Firefox 也有两种使用代理的方式:

  • Use system proxy settings : 使用系统代理
  • Manual proxy configuration : 手动设置代理

4. Charles的配置: HTTPS/SSL代理

上面的配置,是针对HTTP的,也就是非加密的请求的设置,但是现在的网络环境是加密传输(HTTPS)已经相当普及,所以我们要对SSL/HTTPS 做相应的配置,让Charles也能捕获并解析HTTPS传输。

如果不配置的话,捕获到的HTTPS内容会是乱码,如图:

charles no ssl

我们可以看到,凡是HTTPS传输的,都是,右边的内容也是很多乱码。

小猿们应该已经知道了,HTTPS加密传输靠的是CA证书,配置Charles支持HTTPS也就是把Charles自己的CA证书导入到系统或浏览器。

(1)启用并配置 Charles的SSL 代理
点击菜单 Proxy -> SSL Proxying Settings,选中 “Enable SSL Proxying”,点击“Add”,Host填写*(即对所有网站使用代理),Port填写 443,点击OK保存即可。如图:

charles windows ssl

(2)Windows导入Charles的根证书
点击菜单 Help -> SSL Proxying -> Install Charles Root Certificate,

charles windows上安装ca证书

会跳出导入证书的窗口,点击 “安装证书”,一步一步安装即可。

charles-windows-CA-install

这种方式导入的证书只对Windows自带的IE浏览器生效,而对Firefox、Chrome等第三方浏览器要自己从浏览器导入证书。如果第三方浏览器不导入Charles的根证书,访问HTTPS网站时,就会是这样的:

charles证书安装通过

同样的,在macOS系统下用这种方式导入的证书只对macOS自带的Safari浏览器生效。

(3)Chrome导入Charles的根证书
Charles证书的获得有两种方式:
一种是从软件里面Save为文件,点击菜单 Help -> SSL Proxying -> Save Charles Root Certificate… 保存为文件。

charles导出ca证书

另一种方法是,Chrome启用Charles代理,访问 chls.pro/ssl 即可下载证书。

得到证书文件后,通过 菜单: 设置->高级-> 管理证书 打开证书管理窗口,点击“受信任的根证书颁发机构”,再点击“导入…”按钮,选择刚才得到的证书导入即可,如图:

charles chrome导出出CA证书

导入证书成功后,记得要重启Chrome浏览器,让证书生效。
这样,Charles就可以解密Chrome的HTTPS传输了。Firefox导入证书的方法类似,就不再详述。使用Firefox的小猿们可以自己试试看。

猿人学banner宣传图

我的公众号:猿人学 Python 上会分享更多心得体会,敬请关注。

***版权申明:若没有特殊说明,文章皆是猿人学 yuanrenxue.con 原创,没有猿人学授权,请勿以任何形式转载。***

说点什么吧...