在 python 上(准确地说是 Entought Canopy),使用 urllib2 执行一个简单请求时,服务器拒绝我访问:
data = urllib.urlopen(an url i cannot post because of reputation, params)
print data.read()
错误:
Access denied | play.pokemonshowdown.com used CloudFlare to restrict access
The owner of this website (play.pokemonshowdown.com) has banned your access based on your browser's signature (14e894f5bf8d0920-ua48).
这显然是一个普遍问题,所以我在网上找到了一些线索。
防火墙、代理、浏览器插件或扩展程序可能会抛出误报。尝试使用不同的浏览器访问该网站作为访问该网站的替代方式。
当网站所有者打开名为“我受到攻击”的 DDoS 防护和缓解工具时,就会出现“在访问 (insertsite.com) 之前检查您的浏览器”的情况。该页面通常会消失,并在之后授予您访问该网站的权限5秒。
注意:您需要在浏览器中打开 JavaScript 和 Cookie 才能通过检查。检查已到位,以确保您不是僵尸网络的一部分。”
答案相当明确,除了这一件事...... *我没有使用任何浏览器!该请求是通过 python 程序完成的,带有
urllib.urlopen
请求...
这是否意味着我应该在...Enthought Canopy 中打开cookie 和JavaScript?这句话能构成任何句子吗?当尝试使用编程控制台的基本请求访问该站点时,我几乎不了解有关此浏览器特定检查激活的任何信息。这就是为什么我请求你的帮助。
为什么会发生这种情况?如何绕过它?
这个网站“检查”的不是您的浏览器,而是“用户代理”——您的客户端程序(浏览器、Python 脚本或其他)的字符串最终作为请求标头发送。您可以指定另一个用户代理,参见在 urllib2.urlopen 上更改用户代理。
我刚刚在我的家庭 IP 上使用 Safari 看到了它,正在查看我创作的网站!登录 cloudflare 网站并点击刷新后返回。也许我的移动互联网太慢(在新西兰)并且 JavaScript 没有及时加载?我有 DDOS 保护并且“受到攻击”启用了 AFAIK。
因为我从未见过这个答案 - 我在 MS Edge 上有 3 个浏览器扩展。会议安排程序、Honey 和 Dark Reader(Dark Reader 更改了页面详细信息以使其支持 sudo-dark-mode)。没有任何 CloudFare 网站能让我通过。但在隐身模式下,他们会的。不明白为什么。
我删除了所有三个,CloudFare 不再给我带来问题。
检查您的浏览器扩展。很容易忘记,很可能是一个人行为不当。