Location в CURL

Возврат к списку

redirect-index.php-to-root.jpg

Добрый день. Очень часто при написании скриптов авторизации встает проблема с перенаправлением. Например вы отправляете POST запрос на авторизацию и в ответ ,при удачной автоизации, мы получаем следующее:
HTTP/1.1 302 Found Date: Fri, 16 Jul 2010 10:43:07 GMT Server: Apache/2 Expires: Mon, 26 Jul 1997 05:00:00 GMT Last-Modified: Fri, 16 Jul 2010 10:43:07 GMT Cache-Control: post-check=0, pre-check=0 Pragma: no-cache Location: /rus++/options/ Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 20 Content-Type: text/html; charset=windows-1251 

Итак при успешной авторизации скрипт нас должен отправить по адресу site.ru/rus++/options/ и такpих перенаправлений может быть целое множество. На помощь вам придет, функция на Php, которая парсит выдачу и перенаправляет нас куда нужно. Автор функции не Я, выдрал из одного забугорного даижка, но иногда очень выручает.
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) 
       { 
        //couldn't process the url to redirect to 
        $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); 
       //debug('Redirecting to', $new_url); 
       return curl_redir_exec($ch); 
     } 
       else 
                    { 
        $curl_loops=0; 
        return $data; 
        } 
} 
  
Постовой: Качественный софт для видеоконференций. Сделай свою конференцию интерактивной.
>


Возврат к списку