夜阑卧听风吹雨

铁马冰河入梦来

Loading

记一次 Fiddler 无法抓包 PyCharm 的问题

前言

之前尝试分析某条的反爬虫策略,结果遇到了 Fiddler 无法抓取 PyCharm 发出的请求的怪事。请求可以正常发出与获取响应,但就是在 Fiddler 看不到记录。

因此笔者可以确定是自身环境的问题,不是网站的手段(它哪里做得到让我抓不到,但是又能有响应呢!)

几天后,又看到一位新人提出了一个小问题,想帮帮忙。但是软件还是抓不到数据,于是就动手解决一下(善良就是好)。

经过一步步排查,笔者最终发现问题所在(原来是笔者自己以前给自己挖的坑😨,都给忘了)。读者可以根据我的思路进行检查。

归根结底,笔者此次问题是因为软件的设置问题。

排查问题

代理设置问题

首先网上看一下有没有相关方法。

看到有说代理的问题,我想到了是不是我的 Fiddler 设置代理的时候出现了问题,没有成功设置系统代理。

网上的大部分都是在代码里手动将请求发送到 Fiddler 代理上的,而我的一般都是直接设置成系统代理,所以我一般都可以直接抓包的。但是现在唯独抓不到 PyCharm 的包,就浏览器还是可以正常抓包

还是看一下吧,在系统设置看了一下,代理设置正常:

图片

看一下 Fiddler 设置里的端口,也是 8888。

说明系统代理应该没有问题,那么会不会是 PyCharm 没走这个端口呢?

于是手动在代码里设置上代理:

import requests

data = requests.get(url='https://www.baidu.com',
                    proxies={'http': 'http://127.0.0.1:8888', 'https': 'http://127.0.0.1:8888'}).text
print(data)

PyCharm 还是正常的获取到了响应,但是笔者的 Fiddler 里还是没有显示任何从 PyCharm 进程里获取到的数据!

规则设置问题

既然代理设置没有问题,那么会不会是被我用的什么 Fiddler 规则隐藏了呢?

这个问题应该是不大可能的,因为以前好像都是可以的获取到的(实际上以前获取到的都是 http 的请求,这时候笔者还没注意到)。

但是,尝试看看,万一是在什么地方不小心开启了多余的太广泛的规则,或者发生 bug 了呢。

首先,我们确定是要抓取的是 All Processes 所有进程,左下角:

图片

再看一下左下角的 Filters ,这些设置的过滤器是没有问题的:

图片

在右边的窗口也是有 Filters 选项卡的,记得自己看看。笔者因为自己从没使用过该功能,所以此处便没有查验。

在 Rules 里看一下启用的规则:

图片

全部关了看看。就在笔者关闭掉这些规则以后,发现了一些端倪:

图片

由于关闭了 Hide CONNECTs,显示出来了 Tunnel to。而这些便是与 https 建立连接相关的!

说明可以抓取到一定的数据,但是不知为何无法抓取到完整的请求。

Fiddler HTTPS 抓取设置问题

笔者打开软件设置看了一下,发现了自己以前给自己挖的坑:

图片

那路或多!软件被设置了只解密来自浏览器的 https 连接

先前被遗忘的记忆涌来,这是我之前自己设置的😑,还有印象。

将之修改为 ...from all processes,点击 OK 保存,这下总行了吧!

在 PyCharm 运行一下代码,报异常:

requests.exceptions.SSLError: HTTPSConnectionPool(host='www.baidu.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)')))

证书问题,在代码里设置一下 requests 的 verify 参数,关闭证书检验:

import requests

data = requests.get(url='https://www.baidu.com', verify=False,
                    proxies={'http': 'http://127.0.0.1:8888', 'https': 'http://127.0.0.1:8888'}).text
print(data)

再运行一下,终于获取到了😭:

图片

后记

笔者现在想起来了,原来是之前要用抓包的时候,要抓的 PyCharm 的都是 http 的包,以及一些浏览器插件的特殊需要,顺带可以不用为 https 请求的代码设置 verify,所以就设置仅解密来自浏览器的 https 请求。

当时还稍微心理暗示了一下自己,要记得这里设置了仅浏览器,然而现在都忘了。

所以实际上,笔者抓不到的是 PyCharm 以及其它【非浏览器进程】的 【https 请求】

诶,自己挖的坑,噙着泪也要给它填上,仅以此文纪念此番逝去的记忆。

posted @ 2021-05-31 11:36  二次蓝  阅读(2033)  评论(0编辑  收藏  举报