相关疑难解决方法(0)

Python 的请求会触发 Cloudflare 的安全性,而 urllib 不会

我正在为一家餐厅网站开发自动网络爬虫,但遇到了问题。所述网站使用 cloudlfare 的反机器人安全,我想绕过它,不是攻击模式,而是仅在检测到非美国 IP 或机器人时触发的验证码测试。我试图绕过它,因为当我清除 cookie、禁用 javascript 或当我使用美国代理时,cloudflare 的安全性不会触发。

知道了这一点,我尝试使用 python 的请求库:

import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0'}
response = requests.get("https://grimaldis.myguestaccount.com/guest/accountlogin", headers=headers).text
print(response)
Run Code Online (Sandbox Code Playgroud)

但这最终会触发 Cloudflare,无论我使用什么代理。

但是,当使用具有相同标头的 urllib.request 时:

import urllib.request
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0'}
request = urllib.request.Request("https://grimaldis.myguestaccount.com/guest/accountlogin", headers=headers)
r = urllib.request.urlopen(request).read()
print(r.decode('utf-8'))
Run Code Online (Sandbox Code Playgroud)

当使用相同的美国 IP 运行时,这次它不会触发 Cloudflare 的安全性,即使它使用与请求库相同的标头和 IP。

因此,我试图找出不在 urllib 库中的请求库中究竟是什么触发了 cloudflare。

虽然典型的答案是“然后只使用 urllib”,但我想弄清楚请求到底有什么不同,以及我如何解决它,首先要了解请求的工作原理和 cloudflare 检测机器人的方式,但也是如此我可以将我能找到的任何修复应用到其他 httplib(特别是异步的)

编辑 N°2:到目前为止的进展:

感谢@TuanGeek,我们现在可以使用请求绕过 cloudflare 块,只要我们直接连接到主机 IP …

python web-scraping python-3.x python-requests

13
推荐指数
2
解决办法
7388
查看次数