php教程

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

我的站长站 2023-10-26 人阅读

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抓取数据函数:

/**
* 请求接口
* [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;
}
相关推荐
  • PHP函数
  • php来源
  • PHP数组转换为JSON格式数据

    PHP数组转换为JSON格式数据,这里介绍下PHP json_encode函数,他可以轻松完成转换。json_encode函数PHP json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE 。json_encode语法string json_encode ( $value [, $opt...

    php教程 109 4年前
  • 利用get_headers函数判断链接是否有效或失效

    PHP判断链接是否有效或失效的方法代码,get_headers() 是PHP系统级函数,他返回一个包含有服务器响应一个 HTTP 请求所发送的标头的数组。如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息(可用来判断远程文件是否存在)。函数定义array get_he...

    php教程 132 4年前
  • PHP Array函数教程

    PHP Array函数,主要功能:创建索引数组。PHP Array语法索引数组的语法:array(value1,value2,value3,etc.);关联数组的语法array(key=>value,key=>value,key=>value,etc.);定义和用法array() 函数用于创建数组。在 PHP 中,有三种类型的数组:索引数组 - 带有...

    php教程 74 4年前
  • php获取请求来源域名的四种方法

    1、系统变量方法缺点不使用传递过来的地址和不支持系统变量的主机echo $_SERVER['HTTP_HOST'];2、自带函数方法$url = 'http://www.wdzzz.com/index.php?referer=wdzzz.com';$arr_url = parse_url($url);echo $arr_url['host&#3...

    php教程 57 1年前
  • 利用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:...

    php教程 26 1年前
  • php判断访问来源5秒盾防御攻击代码

    <?phpdefine(&#39;SYSTEM_ROOT&#39;, dirname(preg_replace(&#39;@\\(.*\\(.*$@&#39;, &#39;&#39;, preg_replace(&#39;@\\(.*\\(.*$@&#39;, &#39;&#39;, __FILE__))) . &#39;/&#39;);session_start();date_defau...

    php教程 59 1年前
最新更新