本文目录一览:
- 1、如何用php伪造浏览器ua?
- 2、PHP 模拟HTTP发送POST请求
- 3、php get请求中的请求头应该如何设置
- 4、如何在php中获取curl请求的请求头信息及相应头信息
- 5、php爬虫程序中怎么样伪造ip地址防止被封
如何用php伪造浏览器ua?
file_get_contents 和 curl 这俩强悍的函数,在远程抓取时候相当有用处。不过一些网站会根据来访ip是否携带user_agent来判断是正常的浏览器客户端还是机器。所以,我们的任务就是给他们伪造user_agent。
file_get_contents伪造user_agent 方法如下:
ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;)');
curl伪造user_agent的方法:
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;)');
附带上curl的完整函数方法:
function curl_get_file_contents($URL)
{
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($c, CURLOPT_HEADER, 1);//输出远程服务器的header信息
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;)');
curl_setopt($c, CURLOPT_URL, $URL);
$contents = curl_exec($c);
curl_close($c);
if ($contents) {return $contents;}
else {return FALSE;}
}
这样就可以抓取了,user_agent是可以自己修改的。
PHP 模拟HTTP发送POST请求
用php模拟登陆主要分为三部分1. post数据。2.根据返回的http头,从中截出cookie段。3.伪造http头发送请求。 我这里以用php抓取163相册的需要密码才能访问的目录为例。?phpfunction posttohost($url, $data) //post数据if (!isset($url['query'])) $encoded = "";foreach ($data as $k=$v) $fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80);if (!$fp) return "Failed to open socket to $url[host]";fputs($fp, sprintf("POST %s%s%s HTTP/1.0\n", $url['path'], $url['query'] ? "?" : "", $url['query']));fputs($fp, "Host: $url[host]\n");fputs($fp, "Content-type: application/x-www-form-urlencoded\n");fputs($fp, "Content-length: " . strlen($encoded) . "\n");fputs($fp, "Connection: close\n\n");fputs($fp, "$encoded\n");$line = fgets($fp,1024);if (!eregi("^HTTP/1\.. 200", $line)) return;$results = ""; $inheader = 1;while(!feof($fp)) elseif ($inheader) }fclose($fp);return $results;} 答案补充 function getjs($juser,$jaid,$jcookie) //伪造http头 答案补充 else fclose( $socket ); return $ret;}}$iurl=' '.$iuser.'/'.$aid.'/';$idata=array ('pass'=$pass,'checking'='1'); //通过winsock抓包发现,输入访问密码,会向163相册发送 pass=密码checking=1$mystr=posttohost($iurl,$idata);$pattern='/HALFORDER=(.*?);/';preg_match($pattern,$mystr,$out);$str=getjs($iuser,$aid,$out[1]);echo $str;?
php get请求中的请求头应该如何设置
获取请求头信息,可以在curl_exec函数执行前,添加代码curl_setopt($ch,CURLINFO_HEADER_OUT,true);在curl_exec函数执行后,通过 curl_getinfo($ch,CURLINFO_HEADER_OUT) 来获取curl执行请求的请求数据。
获取响应头信息,可以在curl_exec函数执行前,添加代码 curl_setopt($ch, CURLOPT_HEADER, true);curl_setopt($ch, CURLOPT_NOBODY,true); 之后 通过curl_exec函数来获取响应头信息。获取设置 curl_setopt($ch, CURLOPT_NOBODY,false);然后对curl_exec获取的值通过\r\n\r\n进行分割截取第一部分即为响应头信息。
如何在php中获取curl请求的请求头信息及相应头信息
获取请求头信息,可以在curl_exec函数执行前,添加代码curl_setopt($ch,CURLINFO_HEADER_OUT,true);在curl_exec函数执行后,通过 curl_getinfo($ch,CURLINFO_HEADER_OUT) 来获取curl执行请求的请求数据。
获取响应头信息,可以在curl_exec函数执行前,添加代码 curl_setopt($ch, CURLOPT_HEADER, true);curl_setopt($ch, CURLOPT_NOBODY,true); 之后 通过curl_exec函数来获取响应头信息。获取设置 curl_setopt($ch, CURLOPT_NOBODY,false);然后对curl_exec获取的值通过\r\n\r\n进行分割截取第一部分即为响应头信息。
php爬虫程序中怎么样伪造ip地址防止被封
1、国内ADSL是王道,多申请些线路,分布在多个不同的电信区局,能跨省跨市更好,自己写好断线重拨组件,自己写动态IP追踪服务,远程硬件重置(主要针对ADSL猫,防止其宕机),其余的任务分配,数据回收~
2、1.IP必须需要,,ADSL。如果有条件,其实可以跟机房多申请外网IP。
2.在有外网IP的机器上,部署代理服务器。
3.你的程序,使用轮训替换代理服务器来访问想要采集的网站。
3、ADSL + 脚本,监测是否被封,然后不断切换 ip
设置查询频率限制
正统的做法是调用该网站提供的服务接口。
4、
1 user agent 伪装和轮换
2 使用代理 ip 和轮换
3 cookies 的处理,有的网站对登陆用户政策宽松些
友情提示:考虑爬虫给人家网站带来的负担,be a responsible crawler
5、
尽可能的模拟用户行为:
1、UserAgent经常换一换;
2、访问时间间隔设长一点,访问时间设置为随机数;
3、访问页面的顺序也可以随机着来
6、
1. 对爬虫抓取进行压力控制;
2. 可以考虑使用代理的方式访问目标站点。
-降低抓取频率,时间设置长一些,访问时间采用随机数
-频繁切换UserAgent(模拟浏览器访问)
-多页面数据,随机访问然后抓取数据
-更换用户IP