Обнаружение пути перенаправления URL-адреса php

#php #curl

#php #curl

Вопрос:

Я хочу получить полный путь перенаправления URL-адреса.

Допустим, если source.com перенаправляет на destination.com после нескольких перенаправлений, подобных этому: http://www.source.com / -> http://www.b.com / -> http://www.c.com / -> http://www.destination.com /

как мне получить все перенаправленные URL-адреса?

используя приведенный ниже код, я получаю только http://www.destination.com / как мне определить полную цепочку перенаправления URL-адресов?

 <?php
$url='windows.com';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // follow the redirects
curl_setopt($ch, CURLOPT_HEADER, false); // no needs to pass the headers to the data stream
curl_setopt($ch, CURLOPT_NOBODY, true); // get the resource without a body
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // accept any server certificate
curl_exec($ch);

// get the last used URL
$lastUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

      curl_close($ch);

   echo $lastUrl;
?>
  

У этого кода есть еще одна проблема: он не может обнаружить перенаправленный URL-адрес перенаправлений youtube.
Проверенный URL : https://www.youtube.com/redirect?redir_token=QUFFLUhqbkVxUFZUME9NbWF4RThxdFpGV3pmTTJEdFVWQXxBQ3Jtc0tubGJqU016TzJ6WnlfeUItX0ZmOUItUE1jRlZoZXhxMzNpQllpM0NLSk4ycnBLMGNidTFsX3N6WkU2X3RsUTRZb1lXQVp5SEZjbnU3eDFuZS1VU3dhdzg2QW9ZMTl1azFCZFZHcHRLdFF3dTM1MlRWdw==amp;event=video_descriptionamp;v=KEa2XWRGf_4amp;q=https://www.facebook.com/abhiandniyu

Мой вопрос в том, как мне определить полную цепочку перенаправления URL-адресов для всех типов запросов на перенаправление.

Комментарии:

1. Что вы пробовали до сих пор? Где вы застряли? Написание простых команд cURL сильно раздувает ваш код, так почему бы не использовать какую-нибудь библиотеку, например Guzzle?

Ответ №1:

Вероятно, вы что-то упускаете:

 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
  

добавьте его в свою конфигурацию CURL, и тогда он должен работать.

Ответ №2:

Не следуйте HTTP-перенаправлениям: curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

И вывод HTTP-заголовков во время тестирования: curl_setopt($ch, CURLOPT_HEADER, true);

Затем вы можете получить Location заголовок из полученного HTTP 302 ответа.

Когда это более одного перенаправления, это должно выполняться в цикле, пока HTTP 200 не будет получено. В данном контексте HTTP 200 это означает, что конечный пункт назначения был достигнут.