Получение 301 с cURL, несмотря на FOLLOWLOCATION

Я получаю ошибку 301, несмотря на использование FOLLOWLOCATION и MAXREDIRS. Я не знаю, что делать, я пробовал все, что мог: HEADER до 0, FOLLOWLOCATION до 1, MAXREDIRS до 30, несколько раз менял USERAGENT, использовал COOKIEFILE в одиночку, затем COOKIEJAR вместе с ним, но ничего.

Вот самая странная часть: тот же сайт, который я пытаюсь очистить, не дает 301 для других страниц, только для определенных. Есть идеи??

function curl_start($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.4"); curl_setopt($ch, CURLOPT_REFERER, "http://google.com/"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_ENCODING, "gzip"); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); $html = curl_exec($ch); curl_close($ch); return $html; } 

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

В любом случае, попробуйте это.

 <?php function curl_redirect_exec($ch, &$redirects, $curlopt_header = false) { curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) { list($header) = explode("\r\n\r\n", $data, 2); $matches = array(); preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); $url = trim(array_pop($matches)); $url_parsed = parse_url($url); if (isset($url_parsed)) { curl_setopt($ch, CURLOPT_URL, $url); $redirects++; return curl_redirect_exec($ch, $redirects); } } if ($curlopt_header) return $data; else { list(,$body) = explode("\r\n\r\n", $data, 2); return $body; } } ?> 

SRC: http://www.php.net/manual/en/function.curl-setopt.php#95027

Ваш код работает на моем сервере. Поэтому я предполагаю, что это имеет какое-то отношение к safe_mode или устанавливается open_basedir . Вы можете проверить выходное предупреждение, запустив скрипт с error_reporting(E_ALL); , Он должен показать предупреждение.

Проверьте следующую ссылку, чтобы увидеть решение.

http://php.net/manual/ro/function.curl-setopt.php#102121