Получить CURL, чтобы следовать перенаправлениям

У меня есть приложение в Laravel, которое очищает сайты и получает конкретную информацию.
В последнее время я вижу все больше и больше сайтов, получающих 403 запрещенных, поэтому я решил попробовать cURL впервые.

Единственная проблема, с которой я столкнулся в настоящее время, заключается в том, что сайты, которые имеют перенаправления 301 или 302, cURL не следует за ними.

Вот что у меня есть:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $results['url_search']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');

$str = curl_exec($curl);

$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$header = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$body = substr($str, $header_size);

curl_close($curl);

Поэтому, как я уже сказал, на страницах, где есть перенаправления, я застреваю. Какие-либо предложения?
Я видел некоторые вещи, но ни одна из них не сработала.

2

Решение

curl имеет возможность достичь именно того, что вы ищете,
следующие перенаправления:

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);

Просто добавьте эту строку в ваши параметры curl перед выполнением.

Как и следовало ожидать, это будет следовать за любыми перенаправлениями 301/302 и попадет на сайт, который больше не будет перенаправлять ваш запрос.

Кроме того, помните, что (без обходного пути) это может привести к бесконечному циклу. (сайт a перенаправляет на b, а b перенаправляет на a).

Тем не менее, вы должны использовать эту опцию, а также:

curl_setopt($curl, CURLOPT_MAXREDIRS, 10);

Таким образом, ваши запросы будут завершены после 10 переадресаций, и вам не придется беспокоиться о том, что ваш скрипт работает в бесконечном цикле.

Хороший источник для вашей дальнейшей работы с различными вариантами — это сайт о php.net

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]