使用cURL获取重定向URL


Getting the redirect URL using cURL

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

我目前使用的代码是:

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并解析标头才能获得"下一个"URL。

  • 这是正确的吗
  • 如果"是",我将如何解析标头?例如,我可以安全地explode() 'n上的字符串并找到以Location:开头的项目吗

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