следуйте перенаправления с curl в php - PullRequest
8 голосов
/ 15 декабря 2010

Я знаю, что с помощью 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, перенаправления submition формы, перенаправления meta-refresh!?

обновление Спасибо за ваши ответы @ceejayoz и @Josso. Так есть ли способ, которым я могу проследить все перенаправления программно через php?

Ответы [ 5 ]

9 голосов
/ 15 декабря 2010

cURL не будет следовать перенаправлениям JS или метатегов.

3 голосов
/ 04 декабря 2011

Я знаю, что этот ответ немного запоздал, но я столкнулся с подобной проблемой, и мне нужно было больше, чем просто следование перенаправлениям статуса HTTP 301/302. Поэтому я написал небольшую библиотеку, которая также будет следовать метатегам rel = canonical и og: url.

https://github.com/mattwright/URLResolver.php

Я обнаружил, что мета-теги обновления не приносят особой пользы, но они используются, если не возвращается html-тег head или body.

1 голос
/ 18 августа 2012

Я только что нашел это на сайте php. Он анализирует ответ, чтобы найти перенаправления и следует за ними. Я не думаю, что он получает каждый тип перенаправления, но это довольно близко

http://www.php.net/manual/en/ref.curl.php#93163

Я бы скопировал это здесь, но я не хочу заниматься плагиатом

1 голос
/ 16 декабря 2010

curl - это многопротокольная библиотека, которая обеспечивает небольшую поддержку HTTP, но не намного больше, что поможет в вашем случае. Вы можете вручную найти мета-тег обновления как обходной путь.

Но лучшей идеей было проверить PEAR HTTP_Request или класс Zend_Http, которые, скорее всего, уже предоставляют что-то подобное. Также может быть уместен phpQuery, так как он поставляется с собственными функциями http, но может легко ->find("meta[refresh]"), если есть необходимость. Или ищите класс браузера, подобный Mechanize: Есть ли PHP-эквивалент WWW :: Mechanize Perl?

1 голос
/ 15 декабря 2010

Насколько я знаю, он следует только перенаправлениям заголовка HTTP. (301 и 302).

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