#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
это означает, что конечный пункт назначения был достигнут.