2009-07-04 13 views
9

Vorrei creare uno script php in grado di acquisire una pagina da un sito Web. Pensa a file_get_contents ($ url).file_get_contents dall'URL accessibile solo dopo l'accesso al sito Web

Tuttavia, questo sito Web richiede di compilare un modulo di accesso tramite nome utente/password prima di poter accedere a qualsiasi pagina. Immagino che una volta effettuato l'accesso, il sito Web invii al browser un cookie di autenticazione e, con ogni conseguente richiesta del browser, le informazioni sulla sessione vengano ritrasferite sul sito Web per autenticare l'accesso.

Voglio sapere come posso simulare questo comportamento del browser con uno script php al fine di ottenere l'accesso e catturare una pagina da questo sito.

Più in particolare, le mie domande sono:

  1. Come posso inviare una richiesta che contiene il mio log-in dettagli in modo che il sito web risponde con la sessione informazioni/biscotto
  2. Come faccio leggere la sessione informazioni/biscotto
  3. Come faccio a passare di nuovo questa sessione informazioni con ogni conseguente richiesta (file_get_contents, arricciatura) a il sito web.

Grazie.

risposta

15

Curl è abbastanza adatto per farlo. Non devi fare nulla di speciale se non impostare le opzioni e CURLOPT_COOKIEFILE. Una volta effettuato l'accesso passando i campi del modulo dal sito, il cookie verrà salvato e Curl utilizzerà lo stesso cookie per le richieste successive automaticamente come illustrato di seguito.

Si noti che la funzione seguente salva i cookie su cookies/cookie.txt quindi assicurarsi che la directory/file esista e possa essere scritta su.

$loginUrl = 'http://example.com/login'; //action from the login form 
$loginFields = array('username'=>'user', 'password'=>'pass'); //login form field names and values 
$remotePageUrl = 'http://example.com/remotepage.html'; //url of the page you want to save 

$login = getUrl($loginUrl, 'post', $loginFields); //login to the site 

$remotePage = getUrl($remotePageUrl); //get the remote page 

function getUrl($url, $method='', $vars='') { 
    $ch = curl_init(); 
    if ($method == 'post') { 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); 
    } 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies/cookies.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies/cookies.txt'); 
    $buffer = curl_exec($ch); 
    curl_close($ch); 
    return $buffer; 
} 
+0

Questo funziona a meraviglia per quello che volevo - grazie – Chris

+0

Mi piacerebbe per questo a lavorare per me, ma non è = ( – Brade

+0

non ha funzionato anche per me –