php使用代理绕过cloudflare
时间: 2023-05-09 08:04:20 浏览: 197
在使用 PHP 进行网络爬虫活动时,经常需要使用代理 IP 地址来绕过限制,特别是针对使用了 Cloudflare 的网站。当我们访问这些网站时,它们会强制使用 JavaScript 验证和反爬虫技术,从而阻止爬虫活动。这时候就需要使用代理 IP 地址来隐藏真实 IP,并绕过限制。
PHP 的 curl 和 file_get_contents 是两种常用的实现方式。下面分别介绍:
1. 使用 curl 绕过 limit using file_get_contents
伪造一个 User-Agent http header 以骗过 Cloudflare,同时使用代理来隐藏真实 IP 地址。下面是代码:
```
$url = 'https://www.xxx.com/';
$proxy = 'socks5://127.0.0.1:1080'; // 设置代理
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_PROXY,$proxy); // 设置代理
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
));
curl_setopt($ch,CURLOPT_HEADER,false);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_NOBODY,false);
$data = curl_exec($ch);
curl_close($ch);
echo $data;
```
2. 使用 file_get_contents 绕过 limit
使用 file_get_contents 做简单的 HTTP GET 请求时,我们可以使用 stream_context_set_default() 函数强制指定 HTTP 请求头, 然后使用透明代理,实现隐藏真实 IP 地址。下面是代码:
```
$url = 'https://www.xxx.com/';
$context = stream_context_create(
array(
'http'=>array(
'proxy'=>'tcp://127.0.0.1:1080', // 设置代理
'request_fulluri'=>true,
'header'=>"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\r\n"
)
)
);
$data = file_get_contents($url,false,$context);
echo $data;
```
需要注意的是,这种方式在对付一些简易的反爬虫技术时比较有用,但是如果网站使用了更高级的限制技术(如验证码、JS 加密等),我们需要采用更复杂的解决方案。最好的解决办法是建立一个合理的程序架构来控制和维护网络爬虫的正常运行。
阅读全文