php获取网页请求状态程序示例
对于网页返回状态代码一般情况下我们都会去查自己网站状态码是不是200或错误页面是不是404代码,并且多数情况下我们的查看方法就是使用站长工具或ff浏览器等来查看,极少有人想到自己写一个查看状态代码的功能。 本文就此简述php获取网页请求状态程序示例如下: 方法一,使用 fsockopen(不推荐使用curl_getinfo!) 代码如下: function get_http_code($url="localhost",$port=80,$fsock_timeout=10){
set_time_limit(0); ignore_user_abort(true); // 记录开始时间 list($usec,$sec) = explode(" ",microtime(true)); $timer['start'] = (float)$usec + (float)$sec; // 校验URL if(!preg_match("/^https?:\/\//i",$url)){ $url = "http://".$url; } // 支持HTTPS if(preg_match("/^https:\/\//i",$url)){ $port = 443; } // 解析URL $urlinfo = parse_url($url); if(empty($urlinfo['path'])){ $urlinfo['path'] = '/'; } $host = $urlinfo['host']; $uri = $urlinfo['path'] . (empty($urlinfo['query'])?'':$urlinfo['query']); // 通过fsock打开连接 if(!$fp = fsockopen($host,$port,$errno,$error,$fsock_timeout)){ list($usec,microtime(true)); $timer['end'] = (float)$usec + (float)$sec; $usetime = (float)$timer['end'] - (float)$timer['start']; return array('code'=>-1,'usetime'=>$usetime); } // 提交请求 $status = socket_get_status($fp); $out = "GET {$uri} HTTP/1.1\r\n"; $out .= "Host: {$host}\r\n"; $out .= "Connection: Close\r\n\r\n"; $write = fwrite($fp,$out); if(!$write){ list($usec,microtime(true)); $timer['end'] = (float)$usec + (float)$sec; $usetime = (float)$timer['end'] - (float)$timer['start']; return array('code'=>-2,'usetime'=>$usetime); } $ret = fgets($fp,1024); preg_match("/http\/\d\.\d\s(\d+)/i",$ret,$m); $code = $m[1]; fclose($fp); list($usec,microtime(true)); $timer['end'] = (float)$usec + (float)$sec; $usetime = (float)$timer['end'] - (float)$timer['start']; return array('code'=>$code,'usetime'=>$usetime); } file_get_contents 是 fsockopen 功能的简单打包,效率稍低些,但是抓取成功率很高,所以在 snoopy 出问题的时候我一般拿他来用。5.0.0 添加了对 context 的支持,有了context,他也可以发送 header 信息,自定义用户 agent,referer,cookies 都不在话下。5.1.0 添加了 offset 和 maxlen 参数,可以只读文件的一部分内容。 方法二,使用snoopy.class.phpSnoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单。 代码如下: $ch = curl_init();
curl_setopt($ch,CURLOPT_URL,'//www.52php.cn/'); curl_setopt($ch,CURLOPT_RANGE,'0-500'); curl_setopt($ch,CURLOPT_BINARYTRANSFER,1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $result = curl_exec($ch); curl_close($ch); echo $result; $writefn = function($ch,$chunk) { 一些常见的状态码为: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |