Я знаю, что с помощью cURL я могу видеть целевой URL, указывая cURL на URL, имеющий CURLOPT_FOLLOWLOCATION = true.
Пример :
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "www.example1.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $result = curl_exec($ch); $info = curl_getinfo($ch); //Some information on the fetch curl_close($ch);
$ info будет иметь URL-адрес конечного пункта назначения, который может быть www.example2.com. Надеюсь, мое понимание правильное. Пожалуйста, дайте мне знать, если нет !.
Мой главный вопрос: что все типы перенаправления cURL смогут узнать? Переадресация Apache, переадресация javascript, переадресация формы отправки, мета-обновление перенаправления !?
Обновление Спасибо за ваши ответы @ceejayoz и @Josso. Итак, есть ли способ, с помощью которого я могу следовать программному переадресации через php?
cURL не будет следовать переадресации JS или мета-тегов.
Я знаю, что этот ответ немного запоздал, но я столкнулся с подобной проблемой и нуждался не только в перенаправлении статуса HTTP 301/302. Поэтому я написал небольшую библиотеку, которая также будет следовать метатегам rel = canonical и og: url.
https://github.com/mattwright/URLResolver.php
Я обнаружил теги meta refresh, которые не приносят большой пользы, но они используются, если не возвращается тег html головы или тела.
Насколько я знаю, это происходит только после перенаправления HTTP Header. (301 и 302).
curl – это многопротокольная библиотека, которая обеспечивает лишь небольшую поддержку HTTP, но не намного больше, что поможет в вашем случае. Вы можете вручную проверить тег meta refresh как обходной путь.
Но лучше было проверить PEAR HTTP_Request или класс Zend_Http, которые, скорее всего, уже предоставляют что-то подобное. Также phpQuery может быть уместным, поскольку он поставляется с собственными функциями http, но может легко ->find("meta[refresh]")
если есть необходимость. Или найдите класс браузеров типа Mechanize: существует ли PHP-эквивалент Perl WWW :: Mechanize?
Я только что нашел это на сайте php. Он анализирует ответ, чтобы найти перенаправления и следует за ними. Я не думаю, что он получает все виды перенаправления, но он довольно близко
http://www.php.net/manual/en/ref.curl.php#93163
Я бы скопировал его здесь, но я не хочу плагиата