2009-07-04 8 views
9

Je voudrais créer un script php capable de capturer une page d'un site Web. Pensez file_get_contents ($ url). Cependant, ce site Web exige que vous remplissiez un formulaire de connexion de nom d'utilisateur/mot de passe avant que vous puissiez accéder à n'importe quelle page. J'imagine qu'une fois connecté, le site Web envoie un cookie d'authentification à votre navigateur et, à chaque demande de navigateur, l'information de la session est transmise au site Web pour authentifier l'accès.file_get_contents de l'URL qui n'est accessible qu'après s'être connecté au site Web

Je veux savoir comment je peux simuler ce comportement du navigateur avec un script php afin d'accéder et de capturer une page de ce site.

Plus précisément, mes questions sont les suivantes:

  1. Comment puis-je envoyer une demande contient mon journal en détails afin que le site répond à la session informations/cookies
  2. Comment puis-je lire les informations session de l'information/cookies
  3. Comment puis-je retraverser cette session avec chaque demande conséquente (file_get_contents, curl) à le site Web.

Merci.

Répondre

15

Curl est assez bien adapté pour le faire. Vous n'avez rien d'autre à faire que de définir les options CURLOPT_COOKIEJAR et CURLOPT_COOKIEFILE. Une fois que vous vous êtes connecté en passant les champs du site, le cookie sera sauvegardé et Curl utilisera ce même cookie pour les requêtes suivantes, comme l'illustre l'exemple ci-dessous.

Notez que la fonction ci-dessous enregistre les cookies à cookies/cookie.txt, donc assurez-vous que le répertoire/fichier existe et dans lequel vous pouvez écrire.

$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

Cela fonctionne un régal pour ce que je voulais - merci – Chris

+0

Aimerait pour que cela fonctionne pour moi, mais ce n'est pas = ( – Brade

+0

ne fonctionne pas pour moi aussi –