获取url的时候,我尝试过file_get_content、fsockopen两上方法来获取,要么是获了不完全,要么就是获取的地址经过多次跳转后无法获取了
在最后,测试出了curl是可以获取到跳转多次的地址;
要使用curl需要使用php的curl库,在编译的时候需我加上–with-curl 来开启curl库,Windows 打开php.ini,将extension=php_curl.dll前的;号去掉。
CURL有很多参数和选项的,En比较好的同学可以直接看官方的手册,英文件烂的同学可以尝试搜一下百度,也能找到一些说明的
// create a new curl resource
创建一个新的会话
$ch
= curl_init();
设置一个url和一些参数
CURLOPT_URL:这个是 url协议,也就是指定是http还是https
// set URL and other appropriate options
curl_setopt(
$ch
, CURLOPT_URL, “http:
//www.google.com/”);
// 设置浏览器的特定header
curl_setopt(
$ch
, CURLOPT_HTTPHEADER,
array
(
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)"
,
"Accept-Language: en-us,en;q=0.5"
));
// 页面内容我们并不需要
curl_setopt(
$ch
, CURLOPT_NOBODY, 1);
// 只需返回HTTP header
curl_setopt(
$ch
, CURLOPT_HEADER, 1);
// 返回结果,而不是输出它
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, 1);
$output
= curl_exec(
$ch
);
curl_close(
$ch
);
// 有重定向的HTTP头信息吗?通过正则取出来
if
(preg_match(
"!Location: (.*)!"
,
$output
,
$matches
)) {
echo
$matches
[1];
}
完整的方法如下:
function getUrl($url) {
$ch = curl_init();
// 设置 url
curl_setopt($ch, CURLOPT_URL, $url);
// 设置浏览器的特定header
curl_setopt($ch, CURLOPT_HTTPHEADER, array(“User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)”, “Accept-Language: en-us,en;q=0.5”));
// 页面内容我们并不需要
curl_setopt($ch, CURLOPT_NOBODY, 1);
// 只需返回HTTP header
curl_setopt($ch, CURLOPT_HEADER, 1);
// 返回结果,而不是输出它
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
// 有重定向的HTTP头信息吗?
if (preg_match(“!Location: (.*)!”, $output, $matches)) {
return $matches[1];
} else {
return false;
}
}