淘先锋技术网

首页 1 2 3 4 5 6 7
< p >PHP 是目前广泛应用于 Web 开发的语言之一,它提供了丰富的扩展组件,其中之一就是 cURL,可以使我们方便地进行 HTTP 请求和数据传输。然而有些网站为了安全性采用 Cloudflare 作为反 DDos 工具,Cloudflare 会进行流量认证,如果你采用普通的 cURL 方式去请求,就会遇到一些反爬虫的限制。本文将给出解决方案,供大家参考使用。< p >使用 PHP cURL 访问带有 Cloudflare 安全认证的网站,需要我们加入具体的 HTTP 头部信息,一些常见的头部如下所示。< pre >$curlOpt = [ CURLOPT_RETURNTRANSFER =>true, CURLOPT_FOLLOWLOCATION =>true, CURLOPT_HEADER =>true, CURLOPT_USERAGENT =>$_SERVER['HTTP_USER_AGENT'], CURLOPT_SSL_VERIFYPEER =>false, CURLOPT_SSL_VERIFYHOST =>false, CURLOPT_HTTPHEADER =>[ 'Accept-Language: zh-cn', 'Connection: Keep-Alive', 'Cache-Control: no-cache', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 'Upgrade-Insecure-Requests: 1' ], ];< p >通过设置 CURLOPT_USERAGENT, CURLOPT_HTTPHEADER 等多个选项来模拟客户端的一些行为,从而达到规避 Cloudflare 认证限制的目的。但是这样的办法还是有风险的,因为如今网络爬虫技术相当发达,你所伪造的这些头部信息可能并不能蒙混过关,这时候就需要我们进行更复杂的操作了。< p >模拟客户端行为最为直接、简单,但它的成功率存在很大风险。更好的方法是,通过分析原网站的验证机制,找到其规律,通过 PHP code 实现相应的逻辑。这种方式能够模拟真实的客户端请求方式,远比第一种方式要好得多,能够降低爬虫被检测的风险。< p >具体实现方法可以参考 @Sukka 大佬的 Cloudflare UAM Bypass 代码,他用 PHP 实现了规避 Cloudflare UAM 认证的逻辑,略微修改一下代码即可应用于 Cloudflare 网站先验认证限制的应用场景。< pre >function uamCloudflareBypass($url) { $ch = curl_init(); $options = [ CURLOPT_USERAGENT =>$_SERVER['HTTP_USER_AGENT'], CURLOPT_RETURNTRANSFER =>true, CURLOPT_FOLLOWLOCATION =>true, CURLOPT_URL =>$url, CURLOPT_ENCODING =>"", CURLOPT_MAXREDIRS =>10, CURLOPT_TIMEOUT =>30, CURLOPT_HTTP_VERSION =>CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST =>"GET", CURLOPT_HTTPHEADER =>array( "accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "accept-encoding: gzip, deflate, br", "accept-language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", "cache-control: no-cache", "pragma: no-cache", "referer: https://google.com/", "upgrade-insecure-requests: 1", "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36", ), ]; curl_setopt_array($ch, $options); $result = curl_exec($ch); if(curl_error($ch)){ var_dump(curl_error($ch)); } return $result; }< p >以上代码是基本的模板,只需要根据实际情况修改 HTTP 头部信息即可。需要注意的是,Cloudflare 的验证机制是动态的,它有时会更改其认证方式,因此我们需要不断分析 Cloudflare 的动态变化,并根据实际情况调整我们的逻辑。< p >总的来说,采用 PHP CURL 绕开 Cloudflare 的反 DDos 认证措施并不是一件容易的事情,需要我们理解实际的规则和原理,并且了解相关的 HTTP 头部信息。只有我们对这些信息有了相当的了解,才能够更加成功地实现 Cloudflare 认证的规避。