Реггер в Твиттере

Discussion in 'PHP' started by Margin, 28 Sep 2011.

  1. Margin

    Margin New Member

    Joined:
    6 Apr 2009
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    Пишу реггер на php с curl
    Других языков не знаю, к сожалению.
    Не могу понять принцип работы регистрации на на твиттере. Отправляю пост запрос сюда https://twitter.com/account/create такого вида
    PHP:
     curl_setopt($ctCURLOPT_POSTFIELDS,     'authenticity_token=&user[name]=jjpgвowc&user[email]=b1g22в[email protected]&user[screen_name]=jjpoвwgc154&user[user_password]=jjpoвwc158745&context=&user[discoverable_by_email]=1&user[send_email_newsletter]=1');
    в ответ от сервера даже заголовки не приходят, в чем может быть проблем, заранее спасибо
     
  2. AnGeI

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

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    Показывайте весь скрипт.
     
  3. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    >authenticity_token

    и почему токен пустой?
     
  4. Margin

    Margin New Member

    Joined:
    6 Apr 2009
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    PHP:
    function check_login$url,$cookies)
       {
       
       
    $ct curl_init();
       if(!
    $ct) return 0;
       
       
    // готовим заголовки POST запроса
       
    $head    = array();
       
    $head[] = "Accept: */*";
       
    $head[] = "Referer: http://twitter.com/";
       
    $head[] = "Accept-Language: ru";
       
    $head[] = "x-requested-with: XMLHttpRequest";
       
    $head[] = "Content-Type: application/x-www-form-urlencoded";
       
    $head[] = "Accept-Encoding: gzip, deflate";
       
    $head[] = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)";
       
    $head[] = "Accept-Charset: windows-1252, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1";
       
    $head[] = "Connection: Keep-Alive";
       
    $head[] = "Cache-Control: no-cache";
       
       
    // устанавливаем опции CURL`a
       
    curl_setopt($ctCURLOPT_HTTPHEADER,       $head);   
       
    curl_setopt($ctCURLOPT_URL,        $url);    
        
    curl_setopt($ctCURLOPT_RETURNTRANSFER,    1);
        
    curl_setopt($ctCURLOPT_HEADER,          1);
        
    curl_setopt($ctCURLOPT_CONNECTTIMEOUT,    10);         // ждем коннекта 10 секунд
        //curl_setopt($ct, CURLOPT_COOKIEJAR,        $cookie);      // куки, получаемые от сервера
       //curl_setopt($ct, CURLOPT_COOKIEFILE,       $cookie);   // куки, отправляемые серверу
       
    curl_setopt($ctCURLOPT_PROXYAUTH,       0);
    curl_setopt($ctCURLOPT_COOKIE$cookies);
     
    curl_setopt($ctCURLOPT_POST,       1);
     
    curl_setopt($ctCURLOPT_POSTFIELDS,     'authenticity_token=&user[name]=jjpgowc&user[email][email protected]&user[screen_name]=jjpowgc154&user[user_password]=jjpowc158745&context=&user[discoverable_by_email]=1&user[send_email_newsletter]=1');
       
    curl_setopt($ctCURLOPT_ENCODING,          "gzip");   
    curl_setopt($ct,CURLOPT_SSL_VERIFYPEER 1);
                                    
    curl_setopt($ct,CURLOPT_SSL_VERIFYHOST2);
       
    // получаем в ответ сервера $rcont и возвращаем его
        
    $rcont curl_exec($ct);
        
    curl_close($ct);
        
    sleep(1);
        return 
    $rcont;
       }
       
       
       
    $url='https://twitter.com/account/create';
       
    $content=check_login($url,'');
       echo 
    $content;
     
  5. AnGeI

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

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    Все отлично работает, строку 29 можно убрать.
    PHP:
    curl_setopt($ctCURLOPT_PROXYAUTH,       0);
    Ищите внешние причины.
     
    #5 AnGeI, 29 Sep 2011
    Last edited: 29 Sep 2011
  6. bad_boy

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

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    Есть отличия, от реального.
    Сначала нужно загрузить страницу https://twitter.com/signup, она присылает куки, их надо потом отправлять.
    Такого нет:
    Если стоит
    соединение не рвётся, поэтому, возможно, ответа и нет. Firefox посылает дополнительно
     
  7. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    Юзай
    Он универсален.
     
  8. Margin

    Margin New Member

    Joined:
    6 Apr 2009
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    Самое странное что с http работает все нормально, а вот с https не хочет... в чем может быть проблемка
    все разобрался, всем спасибо
    PHP:
    curl_setopt($ct,CURLOPT_SSL_VERIFYPEER 0);
                                    
    curl_setopt($ct,CURLOPT_SSL_VERIFYHOST0);
     
    #8 Margin, 30 Sep 2011
    Last edited: 30 Sep 2011
  9. Margin

    Margin New Member

    Joined:
    6 Apr 2009
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    Теперь новая проблема:
    После авторизации успешно получаю куки и затем перехожу курлом на http://twitter.com

    в ответ приходит:
    Code:
    403 Forbidden: The server understood the request, but is refusing to fulfill it.
    В чем проблема?
     
    #9 Margin, 30 Sep 2011
    Last edited: 30 Sep 2011
  10. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Margin в том что вы делаете что-то не так. Показывать нужно код, выделяя места, где, по вашему, может быть ошибка. Философские рассуждения вида "в чем проблема?" - выкиньте подальше.

    Как рекомендация - предлагаю смотреть пакеты в сниффере, делая одни и те же действия браузером и скриптом - если что-то отличается (а оно отличается) - повторять в точности.
     
    _________________________
  11. Margin

    Margin New Member

    Joined:
    6 Apr 2009
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    PHP:
    function check_login$url,$cookies,$post,$postfields)
       {
       
       
    $ct curl_init();
       if(!
    $ct) return 0;
       
       
    // готовим заголовки POST запроса
       
    $head    = array();
       
    $head[] = "Accept: */*";
       
    $head[] = "Referer: https://twitter.com";
       
    $head[] = "Accept-Language: ru";
       
    $head[] = "Content-Type: application/x-www-form-urlencoded";
       
    $head[] = "Accept-Encoding: gzip, deflate";
       
    $head[] = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)";
       
    $head[] = "Accept-Charset: windows-1252, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1";
       
    $head[] = "Connection: Close";
       
    $head[] = "Cache-Control: no-cache";
       
       
    // устанавливаем опции CURL`a
       
    curl_setopt($ctCURLOPT_HTTPHEADER,       $head);  
       
    curl_setopt($ctCURLOPT_URL,        $url);    
        
    curl_setopt($ctCURLOPT_RETURNTRANSFER,    1);
        
    curl_setopt($ctCURLOPT_HEADER,          1);
        
    curl_setopt($ctCURLOPT_CONNECTTIMEOUT,    10);         // ждем коннекта 10 секунд
      
    curl_setopt($ctCURLOPT_COOKIEJAR,        'C:\AppServ\www\cookie.txt');      // куки, получаемые от сервера
     
    curl_setopt($ctCURLOPT_COOKIEFILE,       'C:\AppServ\www\cookie.txt');   // куки, отправляемые серверу**/
       //curl_setopt($ct, CURLOPT_PROXYAUTH,       0);
    /*curl_setopt($ct, CURLOPT_COOKIE, $cookies);*/
     
    curl_setopt($ctCURLOPT_POST,      $post);
     
    curl_setopt($ctCURLOPT_POSTFIELDS$postfields );
     
    curl_setopt($ctCURLOPT_ENCODING,          "gzip");   
    curl_setopt($ct,CURLOPT_SSL_VERIFYPEER 0);

                                    
    curl_setopt($ct,CURLOPT_SSL_VERIFYHOST0);
                                      
    curl_setopt($ct,CURLOPT_FOLLOWLOCATION1);
                                    
    //curl_setopt($ct, CURLOPT_PROXY, 0); 
       // получаем в ответ сервера $rcont и возвращаем его
        
    $rcont curl_exec($ct);
        
    curl_close($ct);
        
    sleep(1);
        return 
    $rcont;
       }
       

       

    $url='https://twitter.com/sessions?phx=1';
       
    $content=check_login($url,'',1,'session[username_or_email]=login&session[password]=pass');
       echo  
    $content;
       
    $url='http://twitter.com/';
       
    $content=check_login($url,'',0,'');
       echo 
    $content;
    Вот код...
     
    #11 Margin, 30 Sep 2011
    Last edited: 30 Sep 2011
  12. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Margin 1) Не забывайте удалять файл со старыми куками перед новой попыткой логина
    2) Реферер передавайте, если вы "переходите" с другой страницы
    3) FOLLOW_LOCATION отключите, чтобы иметь полный контроль за перемещениями
    4) И теперь основная ошибка, почему вам возвращается 403 - передача двух кавычек в качестве $postfields заставляет курл отправлять данные с помощью POST запроса, даже несмотря на установку CURLOPT_POST в ноль - на это и жалуется твиттер. Чтобы этого избежать следует либо делать проверку на пустоту (правильный путь), либо поменять местами CURL_POST и CURL_POSTFIELDS, например так:
    PHP:
     curl_setopt($ctCURLOPT_POSTFIELDS$postfields );  
    curl_setopt($ctCURLOPT_POST,      $post);
     
    _________________________
  13. Margin

    Margin New Member

    Joined:
    6 Apr 2009
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    Агромнейшее спасибо!!! Все исправил.
     
  14. Margin

    Margin New Member

    Joined:
    6 Apr 2009
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    Не подскажете какие прокси нужны для твитера?
    А то что-то вообще не проходит https...
     
  15. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Margin вы задаете неочевидные вопросы. Для того чтобы пользоваться твиттером обычному пользователю - обычно прокси не нужны. Если вы собираетесь спамить - то да, нужны. Для HTTPS требуются прокси поддерживающие метод CONNECT и/или Socks прокси
     
    _________________________