Первое, что нужно попробовать - это curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
, что соответствует параметру командной строки curl -L
.
Версии cURL до 7.19.4, которые были включены в старые, более не поддерживаемые версии PHP., неправильно проверяйте перенаправление с HTTP или HTTPS URI на локальный файл.Это можно использовать, чтобы обойти ограничения open_basedir
, как Марио указал в другой ответ .Таким образом, для этих версий cURL, если задано safe_mode
или open_basedir
, PHP вызывает ошибку, если программа пытается включить CURLOPT_FOLLOWLOCATION
.Это было исправлено в PHP 5.5.3 , и исправление остается во всех поддерживаемых версиях PHP.
Если включение CURLOPT_FOLLOWLOCATION
не разрешает перенаправление, сайт может не использовать 301/ 302 перенаправление вообще, но вместо этого используйте перенаправление JavaScript или отсутствие перенаправления в качестве средства предотвращения злоупотреблений со стороны автоматизированных процессов.При этом сайт ожидает, что пользователь перейдет по ссылке через ручную навигацию (щелчок мышью, касание сенсорным экраном или вкладка и нажатие клавиши Enter).Для этого вам нужно будет проанализировать HTML, чтобы прочитать цель ссылки.Сначала загрузите HTML-код в DOMDocument
, а затем найдите <a>
элементы с многообещающим атрибутом href
.