微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.PHP

Snoopy是一个PHP类,用来模拟浏览器的功能,可以获取网页内容,发送表单。

代码如下:
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,'//www.jb51.cc/');
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) {
static $data='';
static $limit = 500; // 500 bytes,it's only a test
$len = strlen($data) + strlen($chunk);
if ($len >= $limit ) {
$data .= substr($chunk,$limit-strlen($data));
echo strlen($data),' ',$data;
return -1;
}
$data .= $chunk;
return strlen($chunk);
};
$ch = curl_init();
curl_setopt($ch,CURLOPT_WRITEFUNCTION,$writefn);
$result = curl_exec($ch);
curl_close($ch);

一些常见的状态码为:
200 - 服务器成功返回网页
404 - 请求的网页不存在
503 - 服务器超时
301 - 页面重定向

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐