2013-01-23 11 views
6

Sto tentando di accedere a un sito Web utilizzando il plug-in WebBrowser di PHPQuery. Sono in grado di accedere correttamente ma non sono sicuro di come riutilizzare i cookie da una precedente chiamata a quella successiva.Plugin PHPQuery WebBrowser - utilizzo dei cookie

$client = phpQuery::browserGet('https://website.com/login', 'success1'); 

function success1($browser) { 
    $handle = $browser 
    ->WebBrowser('success2'); 
    $handle 
    ->find('input[name=name]') 
     ->val('username'); 
    $handle 
    ->find('input[name=pass]') 
     ->val('password') 
     ->parents('form') 
     ->submit(); 
} 

function success2($browser) { 
    print $browser; // prints page showing I'm logged in 

    // make authenticated requests here 
} 

Come faccio altre richieste con i cookie di sessione/accesso?

+0

Purtroppo non penso che sia possibile con questo plugin, ma se potessi spiegare il tuo obiettivo potremmo essere in grado di inviarti in un'altra direzione che potrebbe funzionare per te. Ad esempio, è possibile utilizzare 'CURL' per accedere a un sito esterno e rimanere connessi. Qualcosa come 'semplice DOM HTML' potrebbe essere usato per analizzare i risultati e fare richieste di follow-up –

risposta

3

Ho dato un'occhiata al codice sorgente per aiutarti con questo problema. La mia prima impressione è stata che il codice fosse scritto male. Codice di debug commentato, errori di scrittura dappertutto, funzioni lunghe miglia, ecc. Si potrebbe davvero voler prendere in considerazione il passaggio a una soluzione diversa a lungo termine perché se l'autore cambia qualcosa in questo codice, si potrebbe finire per avere il proprio codice rotto con un aggiornamento.

Detto questo, il plug-in WebBrowser consente di accedere all'oggetto browser stesso, che contiene una funzione chiamata getLastResponse(). Questo restituisce un oggetto Zend_Http_Response, che è possibile utilizzare teoricamente per ottenere i cookie.

Il problema è che non è possibile impostare tali cookie. Si dovrà applicare una patch del browser plug-in Web da qualche parte intorno alla linea 102 per inserire il tuo oggetto di richiesta HTTP (parametro 2 per phpQuery::ajax()) con i cookie impostati, da queste parti:

$xhr = phpQuery::ajax(array(
    'type' => 'GET', 
    'url' => $url, 
    'dataType' => 'html', 
)); 

In alternativa si potrebbe anche ricucire phpQuery.php linea 691 a includi un cookie jar globale che potresti definire singleton o così. (Proprio dove dice $client->setCookieJar();).

Anche in questo caso, questo codice è scritto molto male, probabilmente è MOLTO meglio usare raw curl calls, anche se manca un po 'di funzionalità.

Problemi correlati