Come effettuare il login con Arricciatura e SSL e i cookie

Ho provato a fare il log in barnesandnoble.com sito mobile con curl
e non hanno avuto fortuna finora. Torno pagina senza errori
e il default è la mia e-mail in e-mail modulo di input box della pagina di login di nuovo (in forma tornato da stampare $risultato).

Lo stesso codice può effettivamente farmi andare in ebay correttamente
cambiando LOGINURL a punto per ebay login

Con l’unica differenza che barnesandnobles è https://
e ebay login http://

Inoltre, credo che barnes sito è in asp/aspx, quindi non so
come che dovrebbe gestire i cookie e _state in modo diverso

Qualsiasi aiuto sarebbe apprezzato come ho cercato di eseguire il debug di questo per il
passato in 16 ore

anche il mio cookie.txt è scrivibile e di lavoro

<?php
    $cookie_file_path = "C:/test/cookie.txt";
    $LOGINURL = "https://cart2.barnesandnoble.com/mobileacct/op.asp?stage=signIn"; 
    $agent = "Nokia-Communicator-WWW-Browser/2.0 (Geos 3.0 Nokia-9000i)";

    $ch = curl_init(); 

    $headers[] = "Accept: */*";
    $headers[] = "Connection: Keep-Alive";
    $headers[] = "Content-type: application/x-www-form-urlencoded;charset=UTF-8";

    curl_setopt($ch, CURLOPT_HTTPHEADER,  $headers);
    curl_setopt($ch, CURLOPT_HEADER,  0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_URL, $LOGINURL);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);

    $content = curl_exec($ch); 

    curl_close($ch); 

    unset($ch); 

    //NAME="path_state" value="6657403">

    if(stristr($content,"path_state")){
        $array1 = explode('path_state" value="',$content);
        $content1 = $array1[1];
        $array2 = explode('">',$content1);
        $content2 = $array2[0];
    }

    $LOGINURL = "https://cart2.barnesandnoble.com/mobileacct/op.asp?stage=signIn";
    $POSTFIELDS = "d_hidPageStamp=V_3_17&hidViewMode=opSignIn&stage=signIn&previousStage=mainStage&path_state=" .  $content2 . "&[email protected]&acctPassword=YOURPASSWORD";
    $reffer = "https://cart2.barnesandnoble.com/mobileacct/op.asp?stage=signIn"; 

    $ch = curl_init(); 

    $headers[] = "Accept: */*";
    $headers[] = "Connection: Keep-Alive";
    $headers[] = "Content-type: application/x-www-form-urlencoded;charset=UTF-8";

    curl_setopt($ch, CURLOPT_HTTPHEADER,  $headers);
    curl_setopt($ch, CURLOPT_HEADER,  0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   
    curl_setopt($ch, CURLOPT_URL, $LOGINURL); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_REFERER, $reffer); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 

    $result = curl_exec($ch);  

    print $result; 
?>
Sarei cauto sulla scrittura per il cookie stesso file da più richieste simultanee.

OriginaleL’autore Heather McVay | 2012-04-25

One Reply
  1. 17

    Qui è un esempio che ho creato dal codice. Questo utilizza una funzione getFormFields che ho scritto per una domanda simile (primo riferimento al fondo di questo post) che registra in Android market.

    Penso che ci potrebbe essere stato un paio di cose nel vostro script che impedivano l’accesso. Primo, si dovrebbe urlencode URL parametri come la posta elettronica e la password nel post stringa (cURL non farà questo per voi). Secondo, penso che il x valore utilizzato come parte dell’URL di accesso può essere richiesto.

    Qui è una soluzione che effettua con successo. Nota, ho ri-usato originale cURL gestire. Questo non è necessario, ma se si specificare keep-alive, che in realtà ri-utilizzare la stessa connessione, e si evita anche di dover specificare le stesse opzioni.

    Una volta che hai i cookie, è possibile creare un nuovo cURL oggetto e specificare il COOKIEFILE e COOKIEJAR e verrà registrato in senza compiere i primi passi.

    <?php
    
    //options
    $EMAIL            = '[email protected]';
    $PASSWORD         = 'yourpassword';
    $cookie_file_path = "/tmp/cookies.txt";
    $LOGINURL         = "https://cart2.barnesandnoble.com/mobileacct/op.asp?stage=signIn"; 
    $agent            = "Nokia-Communicator-WWW-Browser/2.0 (Geos 3.0 Nokia-9000i)";
    
    
    //begin script
    $ch = curl_init(); 
    
    //extra headers
    $headers[] = "Accept: */*";
    $headers[] = "Connection: Keep-Alive";
    
    //basic curl options for all requests
    curl_setopt($ch, CURLOPT_HTTPHEADER,  $headers);
    curl_setopt($ch, CURLOPT_HEADER,  0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);         
    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 
    
    //set first URL
    curl_setopt($ch, CURLOPT_URL, $LOGINURL);
    
    //execute session to get cookies and required form inputs
    $content = curl_exec($ch); 
    
    //grab the hidden inputs from the form required to login
    $fields = getFormFields($content);
    $fields['emailAddress'] = $EMAIL;
    $fields['acctPassword'] = $PASSWORD;
    
    //get x value that is used in the login url
    $x = '';
    if (preg_match('/op\.asp\?x=(\d+)/i', $content, $match)) {
        $x = $match[1];
    }
    
    //$LOGINURL   = "https://cart2.barnesandnoble.com/mobileacct/op.asp?stage=signIn";
      $LOGINURL   = "https://cart2.barnesandnoble.com/mobileacct/op.asp?x=$x";
    
    //set postfields using what we extracted from the form
    $POSTFIELDS = http_build_query($fields); 
    
    //change URL to login URL
    curl_setopt($ch, CURLOPT_URL, $LOGINURL); 
    
    //set post options
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS); 
    
    //perform login
    $result = curl_exec($ch);  
    
    print $result; 
    
    
    function getFormFields($data)
    {
        if (preg_match('/(<form action="op.*?<\/form>)/is', $data, $matches)) {
            $inputs = getInputs($matches[1]);
    
            return $inputs;
        } else {
            die('didnt find login form');
        }
    }
    
    function getInputs($form)
    {
        $inputs = array();
    
        $elements = preg_match_all('/(<input[^>]+>)/is', $form, $matches);
    
        if ($elements > 0) {
            for($i = 0; $i < $elements; $i++) {
                $el = preg_replace('/\s{2,}/', ' ', $matches[1][$i]);
    
                if (preg_match('/name=(?:["\'])?([^"\'\s]*)/i', $el, $name)) {
                    $name  = $name[1];
                    $value = '';
    
                    if (preg_match('/value=(?:["\'])?([^"\'\s]*)/i', $el, $value)) {
                        $value = $value[1];
                    }
    
                    $inputs[$name] = $value;
                }
            }
        }
    
        return $inputs;
    }

    Questo ha funzionato per me, spero che vi aiuta a ottenere.

    Qui ci sono alcune altre cURL risposta ce l’ho, che può aiutare a imparare:

    Grazie, (molto apprezzato) che ha funzionato.
    Sei il benvenuto, sono contento che ha aiutato.
    Drew, questa risposta mi ha aiutato a ottenere la risposta alla mia domanda, stackoverflow.com/questions/16611362/curl-login-into-ebay-co-uk/… spero non ti dispiaccia, ma ho usato alcuni di voi di codice. 🙂
    Tutto bene, contento che sia stato utile! Vedo che è anche molto bello di credito, quindi non posso ringraziarvi abbastanza.
    Provato altre soluzioni, nessuno ha funzionato. Utilizzato tuoi e finalmente ha ottenuto quello che mi serviva. Grazie un milione…

    OriginaleL’autore drew010

Lascia un commento