在使用pycharm开发一些需要访问网络资源的程序时,往往会因人或因物导致的一些配置,表面上看不出异常问题,但实质运行过程中并未如预期,最后就是产生一些莫名其妙的结果,即使检查了千万遍,可能也检查不出问题所在。其中的原因,很多是我们的请求头或参数有问题,在爬虫领域更甚,有时在代码中配置了相同的请求url,header,cookie,以为是配对了,但有时方式不一定对,有时在这框架OK,换了个框架,得到的响应内容又不一样。
所以,这时候为了保证我们发送的请求参数和目标网站收到的请求参数都是OK的,就需要有第三方的抓取工具来跟踪和对比,而fiddler主是比较好的抓包工具,通过配置代理实理完美抓取网络请求。下面主要讲的是两种配置代理的方式:
目录
一、Fiddler安装与配置
Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。 当Fiddler退出的时候它会自动注销, 这样就不会影响别的程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。 解决的办法是重新启动下Fiddler。
fiddler 其它更多的功能、下载和安装在这里就不多讲述了,因为都比较简单,各个版本的安装和配置都是一样的。这里主要提醒下安装完后记得打开监控https协议的选项配置。
如下图:打开fiddler 后,在菜单栏,依次Tools-Options-HTTPS,如图示,在3的标记处打勾。
还有Connection属性也要设置下,如下:
默认的监听端口是8888,可以根据需要修改,并对“Allow remote computers to connect”前打勾选上。
以上配置完了需要重启一下fiddler,就可以正常地通过8888端口来监听http,https协议的网络请求了。
二、代码块中使用局部代理
直接在代码块发送网络请求的地方配置代理,可以有针对性避免其它程序的影响。一般适用范围明确、小、临时性的场景为主。
下面用requests来做个示例:
首先是准备好fiddler代理
fiddler_proxies = {'http': 'http://127.0.0.1:8888', 'https': 'http://127.0.0.1:8888'}
完整样例如下:
fiddler_proxies = {
'http': 'http://127.0.0.1:8888',
'https': 'http://127.0.0.1:8888'
}
url = "https://httpbin.org/get"
r = requests.get(url,headers=headers, proxies=fiddler_proxies)
print(r.status_code,r.text)
执行程序后,在fiddler窗口便可以看到捕获到代码所发送的请求详情,就可以对请求参数、响应等内容进行分析。
三、Pycharm中配置全局代理
这里所说的全局代理是针对pycharm来说的,当然更上一层的全局代理是在电脑操作系统层级做的了。pycharm默认提供有配置代理的选项。通过简单配置就可以使所有项目在发送HTTP请求时通过fiddler向外转发请求。具体配置看下面:
打开代理配置页:菜单File-settings,输入框输入http,找到Http proxy
如图3位置打勾,填写下边的Host,port,然后右下角点确定就好。这时如果是第一次配置,可能会弹出一个安装证书的窗口,点接受就OK了。
如果是直接在pycharm中配置了全局代理,那么在具体的代码块中就不需要再添加代理了。现实中很多人说抓不到pycharm的请求,基本上是配置没搞好。