2008-10-29 9 views
9

J'ai une application PHP qui doit récupérer le contenu d'une autre page web, et la page web que je lis a besoin d'un cookie.Enregistrer les cookies pour les pages web distantes

J'ai trouvé des informations sur la façon de faire cet appel une fois que j'ai le cookie (http://groups.google.com/group/comp.lang.php/msg/4f618114ab15ae2a), mais je ne sais pas comment générer le cookie, ou comment/où le cookie est enregistré.

Par exemple, pour lire cette page web via wget Je fais ce qui suit:

wget --quiet --save-cookies cookie.file --output-document=who.cares \ 
    http://remoteServer/login.php?user=xxx&pass=yyy 

wget --quiet --load-cookies cookie.file --output-document=documentiwant.html \ 
    http://remoteServer/pageicareabout.html 

... ma question est de savoir comment dois-je faire le bit '--save-cookies en PHP pour que je peut utiliser le cookie dans le PHP suivi stream_context_create/file_get_contents bloc:

$opts = array(http'=> array(
    'method'=> "GET", 
    'header'=> 
    "Accept-language: en\r\n" . 
    "Cookie: **NoClueAtAll**\r\n" 
) 
); 

$context = stream_context_create($opts); 
$documentiwant = file_get_contents("http://remoteServer/pageicareabout.html", 
    0, $context); 

Répondre

5

Vous seriez probablement mieux d'utiliser cURL. Utilisez curl_setopt pour configurer les options de gestion des cookies.

Si c'est juste une chose unique, vous pouvez utiliser Firefox avec Live HTTP Headers pour obtenir l'en-tête, puis collez-le dans votre code PHP.

14

Shazam - cela a fonctionné! Merci beaucoup! Dans le cas où quelqu'un d'autre tombe sur cette page, voici ce qui était nécessaire en détail:

  1. installer cURL (pour moi it'was comme simple que 'sudo apt-get install php5-curl' dans ubuntu)
  2. changer la PHP avant-liste pour les éléments suivants:

    <?php 
    
    $cr = curl_init('http://remoteServer/login.php?user=xxx&pass=yyy'); 
    curl_setopt($cr, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($cr, CURLOPT_COOKIEJAR, 'cookie.txt'); 
    $whoCares = curl_exec($cr); 
    curl_close($cr); 
    
    $cr = curl_init('http://remoteServer/pageicareabout.html'); 
    curl_setopt($cr, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($cr, CURLOPT_COOKIEFILE, 'cookie.txt'); 
    $documentiwant = curl_exec($cr); 
    curl_close($cr); 
    
    ?> 
    

au-dessus de l'extrait de code fortement influencé par http://www.weberdev.com/get_example-4555.html.