curl и socks

Discussion in 'PHP' started by GreenBear, 16 Aug 2008.

  1. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    612
    привет, никогда раньше не работал с курл, где приходилось использовать socks4/5.
    теперь возникла такая необходимость,
    короче мои действия такие:
    PHP:
            curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
    curl_setopt($chCURLOPT_USERAGENT'Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1');
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    curl_setopt($chCURLOPT_TIMEOUT30); 
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_HEADER1);
        if(
    $proxy){
            
    $pr $proxy_list[array_rand($proxy_list)];
            
    $pr $pr['ip'].":".$pr['port'];
            
    curl_setopt($chCURLOPT_PROXY$pr);
            switch(
    $input['proxytype']){
                case 
    's5':
                    
    curl_setopt($chCURLOPT_PROXYTYPECURLPROXY_SOCKS5);
                    break;
                case 
    's4':
                    
    curl_setopt($chCURLOPT_PROXYTYPECURLPROXY_SOCKS4); 
                    break;
            }
            
        }
    $input['proxytype'] и s4 и s5, не работают с ними.
    курл отвечает: Empty reply from server.
    если использовать обычные http прокси, то работает отлично.

    вот нужно решить проблему, почему не работает с соксами :( в сети по этому поводу молчек или гугле мой враг :(

    version:
    PHP:
        [version_number] => 463360
        
    [age] => 3
        
    [features] => 1597
        
    [ssl_version_number] => 0
        
    [version] => 7.18.0
        
    [host] => i486-pc-linux-gnu
        
    [ssl_version] => OpenSSL/0.9.8g
        
    [libz_version] => 1.2.3.3
        
    [protocols] => Array
            (
                [
    0] => tftp
                
    [1] => ftp
                
    [2] => telnet
                
    [3] => dict
                
    [4] => ldap
                
    [5] => ldaps
                
    [6] => http
                
    [7] => file
                
    [8] => https
                
    [9] => ftps
            
    )

    )
     
    #1 GreenBear, 16 Aug 2008
    Last edited: 16 Aug 2008
  2. Shadow_p1raT

    Shadow_p1raT Elder - Старейшина

    Joined:
    9 Mar 2008
    Messages:
    174
    Likes Received:
    93
    Reputations:
    0
    глянь тут:
    http://www.armadaboard.com/topic14676.html
     
  3. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    612
    и чего - там ничего нового.
     
  4. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Проверь рабочие ли прокси и не требуют ли пароля. Если с паролем то:
    PHP:
    curl_setopt($curlCURLOPT_PROXYUSERPWD,' username:pass');
     
  5. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    Судя по гуглу, cUrl как то глючно с носками работает, видимо тока по выходным) с Socks5 заставил работать, Socks4 отказывается переваривать ..

    ЗЫ: curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);

    PHP:
    <?
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL"http://xakep.ru");
        
    curl_setopt($chCURLOPT_TIMEOUT60);
        
    curl_setopt($chCURLOPT_PROXY"97.84.1.138:51411");
        
    curl_setopt($chCURLOPT_PROXYTYPECURLPROXY_SOCKS5);
        
    curl_setopt($chCURLOPT_RETURNTRANSFERFALSE);
        
    $result curl_exec($ch);
        echo 
    $result;
        
    curl_close($ch);
    ?>
    При попытке проюзать Socks4 вываливает -
    Notice: Use of undefined constant CURLPROXY_SOCKS4 - assumed ‘CURLPROXY_SOCKS4′
     
    #5 BlackSun, 16 Aug 2008
    Last edited: 16 Aug 2008
  6. disc

    disc Member

    Joined:
    27 Dec 2006
    Messages:
    26
    Likes Received:
    7
    Reputations:
    2
    Curlopt_proxytype может принимать только 2 параметра Curlproxy_http (по-дефолту) либо Curlproxy_socks5
     
  7. presidentua

    presidentua милиционер Античата

    Joined:
    4 Nov 2007
    Messages:
    305
    Likes Received:
    236
    Reputations:
    15
    всю жизнь использую такую когда-то оч. давно написаную функцию, пока ниразу не подводила -
    PHP:
    function get_contents($url,$post=''){
        global 
    $proxy,$proxy_type;
        
    $url=str_replace(' ','+',$url);
        
    $ch curl_init();
        if (
    $proxy!=='')
        {
            if (
    $proxy_type == 'socks'curl_setopt($chCURLOPT_PROXYTYPECURLPROXY_SOCKS5);
            
    curl_setopt($chCURLOPT_HTTPPROXYTUNNEL1);
            
    curl_setopt($chCURLOPT_PROXY$proxy);
        }
        if (
    $post!=='')
        {
        
    curl_setopt($ch,CURLOPT_POST,TRUE);
        
    curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
        }
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_HEADERTRUE);
        
    curl_setopt($chCURLOPT_NOBODYFALSE);
        
    curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
        
    curl_setopt($chCURLOPT_USERAGENT"MSIE 7.0");
        
    curl_setopt($chCURLOPT_TIMEOUT,30);
        
    $result curl_exec($ch);
        if (
    curl_errno($ch)!==0
        {
            
    $er=curl_error($ch);
            
    eecho("Error load page = $url ($er)");
            
    $result=false;
        };
        
    curl_close($ch);
        return 
    $result;
    }