Всем привет. Делаю автологин с помощу curl. CURLOPT_FOLLOWLOCATION использовать нельзя. Вот функция котораю должна переходить по заданой location.
| Код | function curl_redir_exec($ch) { static $curl_loops = 0; static $curl_max_loops = 20; if ($curl_loops>= $curl_max_loops) { $curl_loops = 0; return FALSE; } curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); list($header, $data) = explode("\n\n", $data, 2); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) { $matches = array(); preg_match('/Location:(.*?)\n/', $header, $matches); $url = @parse_url(trim(array_pop($matches))); if (!$url) { $curl_loops = 0; return $data; } $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); if (!$url['scheme']) $url['scheme'] = $last_url['scheme']; if (!$url['host']) $url['host'] = $last_url['host']; if (!$url['path']) $url['path'] = $last_url['path']; $new_url = $url['scheme'].'://'. $url['host'].$url['path'].($url['query']?'?'.$url['query']:''); curl_setopt($ch, CURLOPT_URL, $new_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 2); $data = curl_exec($ch); $curl_loops++; return curl_redir_exec_good($ch); } else { $curl_loops=0; return $data; } }
|
если взять переменную $new_url, скопировать и вставить в адресной строке, загружается страница которая мне и нужна. Но скрипт почемуто зацикливается, и с каждого цикла мне выводит 302ю шибку, хотя уже на втором ходу должен вернуть 200ю, ибо урл передается рабочий и в нужное место Подскажите где я ошибся!!! Спасибо |