Curl + proxy = 302 ошибка

Тема в разделе "PHP", создана пользователем new_forward, 21 янв 2012.

Статус темы:
Закрыта.
Модераторы: latteo
  1. new_forward

    new_forward

    Регистр.:
    5 май 2008
    Сообщения:
    668
    Симпатии:
    44
    Доброго времени суток!!!
    Мой айпи сайт донор забанил, тащу его страницу вот так:


    PHP:
    public function getHtml($url$pr$show_log TRUE$header FALSE$post ='') {
     
            
    $this->url $url;
            
    $ch curl_init($this->url);
            if (
    $header) {
                
    curl_setopt($chCURLOPT_HEADER1);
            }
            
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.11.1");
            
    curl_setopt($chCURLOPT_URL$this->url);
            
    curl_setopt($chCURLOPT_ENCODING"");
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    //proxy
    echo $pr;
                    
    //curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
                    
    curl_setopt($chCURLOPT_HTTPPROXYTUNNEL1);
                    
    curl_setopt($chCURLOPT_PROXY$pr);
    // end proxy
     
            
    curl_setopt($chCURLOPT_POST1);
            
    curl_setopt($chCURLOPT_POSTFIELDS$post);
            
    curl_setopt($chCURLOPT_COOKIE$this->conf->cookie);
            
    curl_setopt($chCURLOPT_CONNECTTIMEOUT10);
            
    curl_setopt($chCURLOPT_TIMEOUT30);
            
    curl_setopt($chCURLOPT_MAXREDIRS10);
            
    curl_setopt($chCURLOPT_REFERER$this->url);
     
            if (
    $this->conf->trim_url) {
                
    $this->url substr($this->url060) . '...';
            }
     
            if (
    $show_log) {
                
    $this->log->showLog('Пытаемся получить страницу ' $this->url);
            }
            if (
    $this->conf->sleep) {
                
    $this->log->showLog('Пауза ' $this->conf->sleep ' секунд');
                
    sleep($this->conf->sleep);
            }
            
    $result curl_exec($ch);
    //echo $result;
    //echo 1;
            
    curl_close($ch);
            if (
    $result) {
                if (
    $show_log) {
                    
    $this->log->showLog('Страница ' $this->url ' получена успешно');
                }
                return 
    $result;
            } else {
                
    $this->log->showLogErr('Ошибка получения страницы ' $this->url);
                return 
    FALSE;
            }
        }

    Выдает 302 ошибку...
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    363
    Симпатии:
    117
    302 это не всегда ошибка/бан, в большинстве случаев это нормальное поведение сайта
    например при попытаке входа в защищенную часть сайта делают редирект на форму логина
    а после ввода логина делают редирект на предыдущую страницу
    ну и при этом сайт отдает 302

    короче чтоб обойти нужно CURLOPT_FOLLOWLOCATION установить в true
    а в CURLOPT_MAXREDIRS задать максимальное число дозволенных редиректов ( чтоб скрипт не ушел в рекурсию :D )

    ну и напиши обертку для курла, а то будет много копипаста
     
  3. lungsmoney

    lungsmoney Постоялец

    Регистр.:
    25 апр 2008
    Сообщения:
    81
    Симпатии:
    23
    А если так попробовать:
    Код:
          curl_setopt($cUrl, CURLOPT_PROXY, $pr);
                    curl_setopt($cUrl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
                    curl_setopt($cUrl, CURLOPT_HTTPPROXYTUNNEL, 1);
    или для Socks5:
    Код:
                    curl_setopt($cUrl, CURLOPT_PROXY, $pr);
                    curl_setopt($cUrl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
     
Статус темы:
Закрыта.