У меня есть приложение в 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);
Поэтому, как я уже сказал, на страницах, где есть перенаправления, я застреваю. Какие-либо предложения?
Я видел некоторые вещи, но ни одна из них не сработала.
curl
имеет возможность достичь именно того, что вы ищете,
следующие перенаправления:
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
Просто добавьте эту строку в ваши параметры curl перед выполнением.
Как и следовало ожидать, это будет следовать за любыми перенаправлениями 301/302 и попадет на сайт, который больше не будет перенаправлять ваш запрос.
Кроме того, помните, что (без обходного пути) это может привести к бесконечному циклу. (сайт a перенаправляет на b, а b перенаправляет на a).
Тем не менее, вы должны использовать эту опцию, а также:
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
Таким образом, ваши запросы будут завершены после 10 переадресаций, и вам не придется беспокоиться о том, что ваш скрипт работает в бесконечном цикле.
Хороший источник для вашей дальнейшей работы с различными вариантами — это сайт о php.net
Других решений пока нет …