使用curl函数获取网站数据,模拟IP地址以伪造来源并防止屏蔽
要利用curl函数抓取网站数据,仿造IP伪造来源防屏蔽,可以使用以下方法: 1. 使用代理服务器(proxy)来隐藏真实IP地址。 2. 设置HTTP头部信息,包括User-Agent、Referer等,以模拟浏览器访问。 3. 使用curl_setopt()函数设置超时时间、重试次数等参数。 4. 对抓取到的数据进行清洗和处理,去除无用信息。 5. 将抓取到的数据存储到本地文件或数据库中。 需要注意的是,这种方法可能会违反网站的使用协议,因此在使用前请确保遵守相关规定。
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(WindowsNT6.1;WOW64)AppleWebKit/537.36';$useragent.='(KHTML,likeGecko)Chrome/70.0.3538.110Safari/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请求地址*@paramarray$data提交参数没有get有post*[url=home.php?mod=space&uid=155549]@Return[/url]bean|array*/publicfunctionsend($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(WindowsNT6.1;WOW64)AppleWebKit/537.36';$useragent.='(KHTML,likeGecko)Chrome/70.0.3538.110Safari/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)){returnfalse;}curl_close($curl);return$html;}