根据URL状态获取302、301重定向后的URL网址

作者:enenba | 发表于:2012-03-04 00:11 | 分类:php源码

很多的网站都使用了URL重定向,这就导致了采集到URL时HTML状态位为302、301的错误。为了避免这个错误,需要判断html头(header) 的信息,当html状态是301或302时,url就不是原来的那个。使用以下的函数可以根据你查询的UR得到真实的URL。

再从真实的URL进行采集。

 

<?php
function realurl($hosturl) {
	$header = get_headers($hosturl, 1);
	echo 'html状态:' ;
	$righturl='';
	if( $header[0]=='HTTP/1.0 302 Found'||
		$header[0]=='HTTP/1.0 302 Moved Temporarily'||
		$header[0]=='HTTP/1.0 301 Moved Permanently'||
		$header[0]=='HTTP/1.0 302 Object moved'||
		$header[0]=='HTTP/1.1 302 Found'||
		$header[0]=='HTTP/1.1 302 Moved Temporarily'||
		$header[0]=='HTTP/1.1 301 Moved Permanently'||
		$header[0]=='HTTP/1.1 302 Object moved')
	{
		$righturl = (strpos($header['Location'],'/')==0) ? $hosturl.$header['Location']: $header['Location'];
		echo '重定向<br />真实的URL为:'.$righturl;
	}elseif($header[0]=='HTTP/1.1 200 OK'||$header[0]=='HTTP/1.0 200 OK') {
		echo '<font color="#666633">200 OK</font>'.'<br />';
		$righturl= $hosturl;
	}else {
		echo '<font color="#ff0033">'.$header[0].'</font>';
		exit('<br />url无法解析');
	}
	if(is_array($righturl)) {
		$righturl = $righturl[0];
		echo 'OK 就是你了'.$righturl;
		return $righturl;
	}else {
		return false;
	}
}


//以下为测试
$hosturl = 'http://www.enenba.com/';
realurl($hosturl);
/*
output
html状态:重定向
真实的URL为:http://enenba.com
*/
?>

想使用的话就去掉输出部分就行了,函数返回正确的URL。我

暂时还没发现什么遗漏,

end

 

 

上一篇: php正则获取图片并下载内容   |   下一篇:转换目录下面的所有文件编码格式» 标签: php源码 php函数 php采集

评论: