Получение URL перенаправления с помощью cURL - PullRequest
2 голосов
/ 06 января 2012

Я хотел бы получить URL перенаправления, используя cURL в PHP.

Код, который я сейчас использую:

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:?

1 Ответ

2 голосов
/ 06 января 2012

Да, вы устанавливаете CURLOPT_HEADER на true, а затем анализируете строку, взорвав ее с помощью \r\n.Есть и другие способы, но не уверен, что они действительны в вашем случае - get_headers() и http://www.php.net/manual/en/function.http-head.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...