Керл, следуй за локацией, но получаешь только заголовок нового места - PullRequest
4 голосов
/ 25 мая 2011

Я знаю, что когда я установлю CURLOPT_FOLLOWLOCATION в true, cURL будет следовать за заголовком Location и перенаправлять на новую страницу.Но возможно ли получить только заголовок новой страницы без перенаправления туда?Или это невозможно?

Ответы [ 6 ]

8 голосов
/ 04 апреля 2013

Создается дубликат PHP cURL: получить цель перенаправления, не следуя ей

Однако это можно сделать в 3 простых шага:

Шаг1. Инициализируйте curl

curl_init($ch); //initialise the curl handle
//COOKIESESSION is optional, use if you want to keep cookies in memory
curl_setopt($ch, CURLOPT_COOKIESESSION, true);

Шаг 2. Получите заголовки для $url

curl_setopt($ch, CURLOPT_URL, $url); //specify your URL
curl_setopt($ch, CURLOPT_HEADER, true); //include headers in http data
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); //don't follow redirects
$http_data = curl_exec($ch); //hit the $url
$curl_info = curl_getinfo($ch);
$headers = substr($http_data, 0, $curl_info["header_size"]); //split out header

Шаг 3. Выполните синтаксический анализ заголовков, чтобы получить новый URL

preg_match("!\r\n(?:Location|URI): *(.*?) *\r\n!", $headers, $matches);
$url = $matches[1];

Получив новый URL, вы можете повторять шаги 2-3 столько раз, сколько захотите.

4 голосов
/ 25 мая 2011

Нет. Вам придется отключить FOLLOWLOCATION, извлечь URL-адрес перенаправления из ответа, а затем отправить новый запрос HEAD с этим URL-адресом.

2 голосов
/ 25 мая 2011

Установите CURLOPT_FOLLOWLOCATION как false и CURLOPT_HEADER как true и получите «Местоположение» из заголовка ответа.

1 голос
/ 25 мая 2011

А для анализа заголовков вы можете использовать CURLOPT_HEADERFUNCTION

0 голосов
/ 19 декабря 2017

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

Функция для получения последнего перенаправления:

function get_redirect_final_target($url)
{
    $ch = curl_init($url);        
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // follow redirects
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1); // set referer on redirect
    curl_setopt($ch,CURLOPT_HEADER,false); // if you want to print the header response change false to true
    $response = curl_exec($ch);
    $target = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    curl_close($ch);
    if ($target)
        return $target; // the location you want
    return false;
}
0 голосов
/ 08 апреля 2015

Убедитесь, что для CURLOPT_HEADER установлено значение True, чтобы получить заголовки в ответе, в противном случае ответ возвращается в виде пустой строки

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