卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章11201本站已运行3223

利用curl函数抓取网站数据,仿造IP+伪造来源+防屏蔽

1、伪造客户端IP地址,假造出访referer:(一般情况下这就可以访问至数据了)

curl_setopt($curl, CURLOPT_HTTPHEADER, ['X-FORWARDED-FOR:110.85.108.185', 'CLIENT-IP:110.85.108.185']);
curl_setopt($curl, CURLOPT_REFERER, 'http://www.demo.com/test.php');

2、如是上面的还是没用,可能将就是别人捉到了真实IP,这时候我们就采用代{过}{滤}理访问。

#  详尽方式
curl_setopt($curl, CURLOPT_PROXY, 'x.x.x.x');    //代{过}{滤}理服务器地址
curl_setopt($curl, CURLOPT_PROXYPORT, 80);             //代{过}{滤}理服务器端口
//curl_setopt($curl, CURLOPT_PROXYUSERPWD, ':'');      //http代{过}{滤}理证书帐号,username:password的格式
curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); //采用http代{过}{滤}理模式
#  缩写方式
curl_setopt($curl, CURLOPT_PROXY, 'http://x.x.x.x:80');

3、除了一种就是用浏览器可以出访,用curl不行。(对方检查了useragent,如果没有就指出是非法来源等检验了)

$useragent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ';
$useragent.= '(KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36';
curl_setopt($curl, CURLOPT_USERAGENT, $useragent);

PHP完整Curl抓取数据函数:

/**
* 请求USB
* [url=home.php?mod=space&uid=718080]@access[/url] public
* [url=home.php?mod=space&uid=952169]@Param[/url] string $url 命令地址
* @param array $data 提交参数 没有get 有post
* [url=home.php?mod=space&uid=155549]@Return[/url] bean|array
*/
public function send($url='')
{  
set_time_limit(0);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, ['X-FORWARDED-FOR:127.0.1.1', 'CLIENT-IP:127.0.1.1']);
curl_setopt($curl, CURLOPT_REFERER, 'http://www.demo.com/demo.php');
curl_setopt($curl, CURLOPT_PROXY, 'http://127.0.0.1:80');
$useragent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ';
$useragent.= '(KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36';
curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
if(!empty($data) && is_array($data)){
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
$html = curl_exec($curl);
if($error=curl_errno($curl)){
return false;
}
curl_close($curl);
return $html;
}
卓越飞翔博客
上一篇: json参数的传递和接收处理方法
下一篇: 158网盘直连解析代码
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏