Переписать php код (socket->curl)

Тема в разделе "PHP", создана пользователем D@nil, 20 июл 2009.

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

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Здравствуйте, подскажите как можно переписать код с использованием сокетов

    PHP:
    function li_post($login$password$n_title$n_body) {

        
    //переменные с куки
        
    $bbuserid = - 1;
        
    $bbpassword = - 1;
        
    $bbusername $login;
        
    $bbredirect $login;
        
    $jurl = - 1;
        
        
    //пакет авторизации
        

        
    $pst_data "action=login&charset=utf&username=" $login "&password=" $password;
        
        
    $headr "POST /member.php HTTP/1.1\r\n";
        
    $headr .= "Host: www.liveinternet.ru\r\n";
        
    $headr .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3\r\n";
        
    $headr .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
        
    $headr .= "Accept-Language: ru,en-us;q=0.7,en;q=0.3\r\n";
        
    $headr .= "Connection: keep-alive\r\n";
        
    $headr .= "Referer: http://www.liveinternet.ru/\r\n";
        
    $headr .= "Content-Type: application/x-www-form-urlencoded\r\n";
        
    $headr .= "Content-Length: " strlen $pst_data ) . "\r\n\r\n";
        
    $headr .= $pst_data;
        
        
    $sct fsockopen "www.liveinternet.ru"80 );
        
    fputs $sct$headr );
        
        while ( ! 
    feof $sct ) ) {
            
    $sanswer fgets $sct4096 );
            
            if (
    $st strstr $sanswer"set-cookie: bbuserid=" )) {
                
    $eps strpos $st";" );
                
    $bbuserid substr $st21$eps 21 );
            }
            
            if (
    $st strstr $sanswer"set-cookie: bbpassword=" )) {
                
    $eps strpos $st";" );
                
    $bbpassword substr $st23$eps 23 );
            }
            
            if (
    $st strstr $sanswer"set-cookie: jurl=" )) {
                
    $eps strpos $st";" );
                
    $jurl substr $st17$eps 17 );
            }
        }
        
        
    fclose $sct );
        
        
    //пакет постинга новости
        

        
    $form_data "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"action\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "newpost\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"parsing\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"journalid\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= $bbuserid "\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"backurl\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"selectforum\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "/journal_post.php?journalid=" $bbuserid "\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"action\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "n_add\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"nurl\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"headerofpost\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= $n_title "\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"mode\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "0\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"status\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "Use these controls to insert vBcode\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"message\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= $n_body "\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"tags\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"make_br_sel\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "yes\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"commentsubscribe\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "yes\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"nocomment\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "0\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"parseurl\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "yes\r\n";
        
    $form_data .= "-----------------------------41184676334\r\n";
        
    $form_data .= "Content-Disposition: form-data; name=\"close_level\"\r\n";
        
    $form_data .= "\r\n";
        
    $form_data .= "0\r\n";
        
    $form_data .= "-----------------------------41184676334--\r\n";
        
        
        
    $headr "POST /journal_addpost.php HTTP/1.1\r\n";
        
    $headr .= "Host: www.liveinternet.ru\r\n";
        
    $headr .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3\r\n";
        
    $headr .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
        
    $headr .= "Accept-Language: ru,en-us;q=0.7,en;q=0.3\r\n";
        
    $headr .= "Connection: keep-alive\r\n";
        
    $headr .= "Referer: http://www.liveinternet.ru/journal_post.php?journalid=" $bbuserid "&action=n_add\r\n";
        
    $headr .= "Cookie: bbuserid=" $bbuserid "; bbpassword=" $bbpassword "; bbusername=" $bbusername "; jurl=" $jurl "; chbx=guest\r\n";
        
    $headr .= "Content-Type: multipart/form-data; boundary=---------------------------41184676334\r\n";
        
    $headr .= "Content-Length: " strlen $form_data ) . "\r\n\r\n";
        
    $headr .= $form_data;
        
        
    $sct fsockopen "www.liveinternet.ru"80 );
        
    fputs $sct$headr );
        
        while ( ! 
    feof $sct ) ) {
            
    $sanswer fgets $sct4096 );
        }
        print ( 
    "Done!" );
    }
    На использование curl

    Я начал, но не могу залогиниться.
    PHP:
    $post="action=login&charset=utf&username=___&password=___";

    echo 
    post 'http://www.liveinternet.ru/member.php',$post,'http://www.liveinternet.ru/' ));

    function 
    post($url ''$content ''$referer '') {
        
    $ch curl_init ();
        
    curl_setopt $chCURLOPT_URL$url );
        
    //curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
        
    curl_setopt $chCURLOPT_RETURNTRANSFER);
        
    curl_setopt $chCURLOPT_TIMEOUT15 );
            
        
    curl_setopt $chCURLOPT_COOKIEFILE"cookiefile" );
        
    curl_setopt $chCURLOPT_COOKIEJAR"cookiefile" );
        
        
    curl_setopt $chCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208' );
        
        if (! empty ( 
    $content )) {
            
    curl_setopt $chCURLOPT_POST);
            
    curl_setopt $chCURLOPT_POSTFIELDS$content );
        } else {
            
    curl_setopt $chCURLOPT_POST);
        }
        if (! empty ( 
    $referer ))
            
    curl_setopt $chCURLOPT_REFERER$referer );
        
    $ss curl_exec $ch );
        
    curl_close $ch );
        
        return 
    $ss;
    }
    подскажите в чем проблема
     
  2. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    что не получается то ?

    оставь рабочий акк от лиру, а то геморно регится что бы помочь


    PS нафига такие сложности если лиру поддерживает интерфейсы удаленного постинга ?

    pps если в посте будут линки придется вводить капчу, ты в курсе ?
     
  3. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Логин:wjagdxe
    Пасс:iyiamoi

    Их я реализовал сразу же, но проблема в том что надо зайти на аккаунт через сайт иначе он не активиуется (внутренняя активация) и не даст постить по XML протоколу.

    по XML не нужно, я много раз пробовал =)
     
  4. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    Вечером посмотрю

    PS когда я писал постер через xml -- постилось нормально, НО! пост со ссылкой оставался скрытым пока не зайдешь в акк и не подтвердишь его введя капчу , советую все же почистить куки и проверить
     
  5. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    проверил у меня по XML поститься нормально.

    описание:
    приведи пример своего кода.

    сейчас парюсь как этот код тоже на курл переписать.
     
  6. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437

    Тут такое дело ))))

    1). Отключи js в браузере и попробуй залогиниться, схолпочешь следующее
    теоретически js код можно отпарсить и прописать нужное в куки самому, но я js не знаю это раз, и такая проверка может быть постоянной =Ю геморно -- это два


    попробуй фин ушами. Версию для PDA



    PHP:
    <?php
    $login
    ="wjagdxe";
    $password="iyiamoi";

    include(
    "./inc/curl_functions.php");


    $POST="username=$login&password=$password&act=login&x=".rand(1,37)."&y=".rand(1,10);
    $page=send_POST("http://www.liveinternet.ru/interface/pda/","http://www.liveinternet.ru/interface/pda/",$POST);
    echo 
    $page;
    ?>


    curl_functions.php :
    PHP:
    <?php
    // инициализирует курл
    // возвращает сессию курла
    function curl_ini(){
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
    curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
        
    curl_setopt($chCURLOPT_COOKIEJAR,realpath(".").'/tmp/cookies.txt');
        
    curl_setopt($chCURLOPT_COOKIEFILE,realpath(".").'/tmp/cookies.txt');
        
    curl_setopt ($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1) Gecko/20061010 Firefox/2.0;MEGAUPLOAD 1.0");
        
    curl_setopt($ch,CURLOPT_VERBOSE,1);
        return 
    $ch;} 
    // загрузка  с помощью курла
    function get_file_by_curl($url,$reffer=""){
        
    $ch=curl_ini();
        
    curl_setopt($chCURLOPT_URL,$url);
        
    curl_setopt($chCURLOPT_REFERER,$reffer);
        
    $result=curl_exec ($ch);
        return 
    $result;}
    // отправка POST запроса 
    // $url - куда 
    //$reffer - откуда 
    // $post - сам запрос
    function send_POST($url,$reffer,$post){
        
    $ch=curl_ini();
        
    curl_setopt($chCURLOPT_URL,$url);
        
    curl_setopt($chCURLOPT_REFERER,$reffer);
        
    curl_setopt($ch,CURLOPT_POST1);
        
    curl_setopt($chCURLOPT_POSTFIELDS$post);
        
    $result=curl_exec($ch);
        return 
    $result;}  
    function 
    clear_cookies(){
        
    fclose(fopen(realpath(".").'/tmp/cookies.txt','w'));
        return ;}    
    ?>
    так у меня логинится, хз только достаточно ли этого для той проверки что тебе нужны


    если знаешь js и сможешь объяснить что делает код на странице авторицации полной версии -- велкам )))

     
  7. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Сейчас протестирую код который ты привел.

    Я PDA версию тоже пробовал курочить, проблема та же не проходит активация свежих аккаунтов.

    В JS я и сам наткнулся, но походу он большой роли не играет тк код в первом посте обходит это ограничение.

    PHP:
            if ($st strstr $sanswer"set-cookie: bbuserid=" )) {
                
    $eps strpos $st";" );
                
    $bbuserid substr $st21$eps 21 );
            }
            
            if (
    $st strstr $sanswer"set-cookie: bbpassword=" )) {
                
    $eps strpos $st";" );
                
    $bbpassword substr $st23$eps 23 );
            }
            
            if (
    $st strstr $sanswer"set-cookie: jurl=" )) {
                
    $eps strpos $st";" );
                
    $jurl substr $st17$eps 17 );
            }
     
  8. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    ясно , жди вечера, сделаю

    тут как раз таки эмулируется js код ( т.е. все манипуляции котрые он делает делаются вручную )

    если есть пример что нужно делать -- вечером сделаю
     
  9. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Пример есть (даже рабочий :) ), он в первом посте.
     
  10. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    с запросом где эти хидеры есть

    лиру сошел с ума, кажется )))

    не суть

    посмотрел я тот код что в первом посте, он делает то же самое что тебе позже выложил я на курсе, асболютно, только там вручную парсятся куки

    попробуй постить так :

    PHP:
    <?php
    function curl_ini(){
    $ch curl_init();
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
    curl_setopt ($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
        
    curl_setopt($ch,CURLOPT_VERBOSE,1);
        
    curl_setopt($ch,CURLOPT_NOPROGRESS,1);
        
    curl_setopt($chCURLOPT_COOKIEJAR,realpath(".").'/cookies.txt');
        
    curl_setopt($chCURLOPT_COOKIEFILE,realpath(".").'/cookies.txt');
        return 
    $ch;}
    // загрузка  с помощью курла
    function get_file_by_curl($url){
        
    $ch=curl_ini();
        
    curl_setopt($chCURLOPT_URL,$url);
        
    $result=curl_exec ($ch);
        return 
    $result;}
    // отправка сообщения
    //$login - логин
    //$pass - пароль
    //$header - тема
    //$message - сообщение
    function sendmessage($login,$pass,$header,$message){
        
    $ch=curl_ini();
        
    curl_setopt($chCURLOPT_URL,"http://www.liveinternet.ru/interface/pda/");
        
    curl_setopt($ch,CURLOPT_POST1);
        
    $POST="username=".$login."&password=".$pass."&act=login";
        
    curl_setopt($chCURLOPT_POSTFIELDS$POST);
        
    $result=curl_exec ($ch);
        
    preg_match('/jid=(\d+)/'$result$tmp);
        
    $code $tmp[1];
        
    curl_setopt($chCURLOPT_URL,"http://www.liveinternet.ru/interface/pda/?act=addpostform&jid=".$code);
        
    $POST="act=addpost&jid=".$code."&postheader=".$header."&postmessage=".$message."&attachfile=&submit=OK";
        
    curl_setopt($chCURLOPT_POSTFIELDS$POST);
        
    $result=curl_exec ($ch);
        return 
    $result;} 




    ?>


    раньше этот код работал

    если нет будем дальше разбираться

     
    D@nil нравится это.
Статус темы:
Закрыта.