php - PHP Curl - 是否有可能避开 Cloudflare 块?
问题描述
我们最近在一些我们过去没有遇到过抓取问题的网站上遇到了 CloudFare 阻塞。
它不是一个 IP 块(从多个 IP 尝试),它不与帐户或任何其他类型的身份验证绑定。该网站不显示用户验证码
我们使用包含所有标头的确切请求创建了一个 PHP Curl 请求GET
,但我们收到一个403 Forbidden
错误并显示:
www.******.com used CloudFlare to restrict access
原谅我的无知,但是 CloudFlare 是如何检测到这一点的呢?不涉及 cookie(作为其初始站点请求),用户代理和其他一切都是相同的。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.******.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
$headers = array();
$headers[] = 'Host: www.******.com';
$headers[] = 'Connection: keep-alive';
$headers[] = 'Sec-Ch-Ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"';
$headers[] = 'Sec-Ch-Ua-Mobile: ?0';
$headers[] = 'Upgrade-Insecure-Requests: 1';
$headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36';
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9';
$headers[] = 'Sec-Fetch-Site: none';
$headers[] = 'Sec-Fetch-Mode: navigate';
$headers[] = 'Sec-Fetch-User: ?1';
$headers[] = 'Sec-Fetch-Dest: document';
$headers[] = 'Accept-Encoding: gzip, deflate, br';
$headers[] = 'Accept-Language: en-US,en;q=0.9';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
结果
HTTP/1.1 403 Forbidden
任何可能的解决方法?
谢谢
解决方案
我认为只有 cloudflare 开发人员才能给你正确的答案。但他们不会那么轻易地公开他们的商业秘密。所有其他信息都是理论和推测。据我所知,作为对站点 cloudflare 的第一个请求的响应,显示带有一些 javascript 的页面以配置浏览器,以证明它是人类使用的堆栈浏览器,而不是 curl。如果浏览器是堆栈一,则 cloudflare 允许后端处理请求。
我认为您可以尝试 selenium,有时它不会触发带有验证码的 cloudflare 阻止程序页面
推荐阅读
- android - 如何使用 Hilt 注入应用程序:ViewModel 中的上下文?
- ajaxcontroltoolkit - ModalPopupExtender 在某些计算机上不显示
- python - Python在Linux上无需打开和关闭即可读取文件
- c# - C# if else 条件在 foreach 循环内可能使用计数
- javascript - 通过网络蓝牙传输文件
- html - 如果我放置一个很棒的字体图标,CSS 不会将我的元素居中
- git - 为什么 rebase 不会拉起我之前的 8 个提交?
- firebase - 在 Firebase 数据库中,当我知道值时如何获取唯一 ID?
- python - 两个列表的深拷贝
- node.js - 在 React 中,在加载 Web 应用程序时加速大量初始数据获取