项目场景:
Fiddler作为常用的抓包软件之一,在网页端抓包和APP抓包时都会有大量的应用场景
问题描述:
开启Fiddler情况下抓包:
import requests
url = "http://www.baidu.com"
headers = {
'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0"
}
response = requests.get(url,headers=headers)
print(response.text)
抓包错误提示:
requests.exceptions.SSLError: HTTPSConnectionPool(host=‘www.baidu.com’, port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(“bad handshake: Error([(‘SSL routines’, ‘tls_process_server_certificate’, ‘certificate verify failed’)])”)))
原因分析:
在配置fiddler抓包工具的时候大伙应该都知道,fidderl的原理是启用一个IP代理,默认IP地址为127.0.0.1,端口号为8888,使发送和获取到的包都走这个代理来实现抓包效果。
那么问题就简单了,在python中设置一个走这个端口的代理IP,并且指定使用fiddler证书就可以实现抓包了
解决方案:
具体源码如下:
- 普通爬虫requests中
import requests
url = "http://www.baidu.com"
headers = {
'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0"
}
proxies = {
"http":"http://127.0.0.1:8888",
"https":"http://127.0.0.1:8888"
}
response = requests.get(url,headers=headers,proxies=proxies,verify='./FiddlerRoot.cer')
print(response.text)
这个证书怎么来的呢?
internet选项(win10)->内容->证书
导出到项目目录,文件名随意,只要在代码中与文件名一致就行
- scrapy框架中,在middlewares.py中间件中添加如下代码
class RandomProxies(object):
def process_request(self,request,spider):
request.meta['proxy'] = "https://127.0.0.1:8888"
最后别忘记在setting.py配置文件中,启用中间件
以上就是全部内容,有帮助的小伙伴可以点个赞,谢谢