吴伟贤のBlog

Feed Rss

php获取多次跳转后的url

09.27.2013, php, by .

获取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;
    }
}

评论已关闭。