Curl, следуйте по местоположению, но получите только заголовок нового места?

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

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

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

Однако это можно сделать тремя легкими шагами:

Шаг 1. Инициализация завитка

 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 так часто, как вам нравится.

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

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

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

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

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

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