php curl伪造referer与来源IP非常的简单,今天做一个图片采集的也有做过,下面我把两个例子都整理一下,供大家参考
例子1[one.php]
<?php $post_data = array ( "user" => "gongwen", "pwd" => "123456" ); $header_ip = array( 'CLIENT-IP:88.88.88.88', 'X-FORWARDED-FOR:88.88.88.88', ); $referer='http://www.111cn.net'; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, 'http://localhost/curl/two.PHP'); //伪造来源referer curl_setopt ($ch,CURLOPT_REFERER,$referer); //伪造来源ip curl_setopt($ch, CURLOPT_HTTPHEADER, $header_ip); //提交post传参 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); //加上这个表示执行curl_exec是把输出做为返回值,不会输出到浏览器 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $out_put=curl_exec ($ch); curl_close ($ch); echo $out_put; [two.php] <?php //请求来源referer echo '[HTTP_REFERER]<br>'; echo $_SERVER['HTTP_REFERER']; //请求来源ip //[注]此处的IP打印顺序是目前很多开源系统的IP获取顺序 echo '<hr>[IP]<br>'; echo $_SERVER['HTTP_CLIENT_IP']; echo '<br>'; echo $_SERVER['HTTP_X_FORWARDED_FOR']; echo '<br>'; echo $_SERVER['REMOTE_ADDR']; //POST数据 echo '<hr>[POST]<br><pre>'; var_dump($_POST); echo '</pre>';
利用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.98lm.com');
2、如是上面的还是不行,可能是别人抓到了真实IP,这时候我们就使用代{过}{滤}理访问
# 详细方式
curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); //使用http代{过}{滤}理模式
curl_setopt($curl, CURLOPT_PROXY, 'x.x.x.x'); // 代{过}{滤}理服务器地址
curl_setopt($curl, CURLOPT_PROXYPORT, &port); //代{过}{滤}理服务器端口
//curl_setopt($curl, CURLOPT_PROXYUSERPWD, ':''); //http代{过}{滤}理认证帐号,username:password的格式
# 简写方式
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抓取数据函数:
/**
* 请求接口
* [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.98lm.com');
curl_setopt($curl, CURLOPT_PROXY, 'http://127.0.0.1:8080');
$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;
}

老马黑科技


