使用cURL获取重定向URL

时间:2012-01-05 21:51:55

标签: php curl

我想在PHP中使用cURL获取重定向网址。

我目前使用的代码是:

public function request($uri = null)
{
    $redirects = 0;

    if ($uri === null) {
        $uri = $this->getUri();
    }

    while ($redirects < $this->options['maxredirects']) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $uri);

        curl_setopt($ch, CURLOPT_USERAGENT, $this->options['useragent']);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, $this->options['timeout']);

        $result = curl_exec($ch);
        $info = curl_getinfo($ch);

        $this->addResult($result, $info);

        if (floor($info['http_code'] / 100) != 3) {
            return null;
        }

        $redirects++;
    }
}

我不知道如何使用CURLOPT_FOLLOWLOCATION,因为(如果错误,请纠正我)自动跟随重定向。

我希望它会出现在curl_getinfo()中,但事实并非如此。看起来我必须启用CURLOPT_HEADER并解析标头以获取“下一个”网址。

  • 这是对的吗?
  • 如果“是”,我怎么能解析标题?例如。我可以安全地explode() \n上的字符串找到以Location:开头的项目吗?

1 个答案:

答案 0 :(得分:2)

是的,您将CURLOPT_HEADER设置为true,然后通过使用\r\n将其展开来解析字符串。 还有其他方法,但不确定它们是否适用于您的情况 - get_headers()http://www.php.net/manual/en/function.http-head.php