Leggere e inviare cookies con PHP e CURL novembre 5, 2008
Inviato da davide in : Programmazione , trackback
Se vi trovate a navigare su internet, potrà capitarvi di dover accedere a pagine in cui è richiesto avere dei cookies settati per poter accedere ai contenuti…
Come fare però se dobbiamo accedere ai contenuti della pagina tramite, ad esempio, uno script PHP?
La soluzione è quella di usare la libreria CURL, veramente completa e adatta a gestire tutti i casi di richieste HTTP. Vediamo come fare:
Facciamo 2 paginette php:
- una che in base al fatto che un determinato cookie sia settato o meno mostra una stringa piuttosto che un’altra (simula la pagina remota a cui vogliamo accedere tramite PHP).
Per semplicità useremo questa pagina anche per settare il cookie in caso non sia già settato, ma nei casi reali il cookie potrebbe essere settato da una pagina xxx e richiesto da un’altra, diciamo yyy. - un’altra che fa 2 richieste: la prima “vuota”, che permetterà all’interprete php di caricare i cookies e salvarli in un file temporaneo. La seconda richiesta poi andrà a richiedere nuovamente la stessa, settando però questa volta i cookies, e mostrando quindi il contenuto differenziato.
Ecco qui la prima pagina (showCookie.php):
<?php
if(! isset($_COOKIE["ck"])) setcookie("ck","antani",time()+3600);
if (isset($_COOKIE["ck"]))
echo "Welcome " . $_COOKIE["ck"] . "!<br />";
else{
echo "Welcome guest!<br />";
}
?>
Come è facile capire, questa parte controlla se il cookie di nome ck è settato: in caso contrario setta il cookie (al client che richiede la pagina, nel nostro caso php) e mostra la scritta “Welcome guest!”.
Se il cookie è già settato, invece mostra la scritta di benvenuto, “personalizzata” col valore settato nel cookie.
E qui lo script php che richiede la pagina 2 volte (provaCookie.php):
<?php
$cookie_file = tempnam ("/tmp", "COOKIE");
$ch = curl_init ("showCookie.php");
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec ($ch);
curl_close($ch);
echo $output;
echo '--------------------------------<br/>';
$ch = curl_init ("showCookie.php");
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec ($ch);
curl_close($ch);
echo $output;
unlink($cookie_file);
?>
Come vediamo, viene innanzitutto creato un file temporaneo per mantenere i cookies ricevuti.
Dopodichè si fanno 2 richieste: con la prima, tramite l’opzione CURLOPT_COOKIEJAR, si imposta il file su cui salvare i cookies ottenuti dalla richiesta curl attuale.
La seconda richiesta viene fatta sempre alla stessa pagina, ma questa volta specificando l’opzione CURLOPT_COOKIEFILE, con la quale si specifica di inviare i cookies contenuti nel file temporaneo (riempito con la prima richiesta).
Infine con unlink cancelliamo il file temporaneo che conteneva il cookie.
In output vengono mostrati (per comodità sullo stessa pagina) gli output delle due richieste:
Welcome guest!
——————————–
Welcome antani!
Come possiamo vedere la prima richiesta, non avendo cookies settati, ci mostra la scritta di default, mentre la seconda, fatta con i cookies ricevuti in seguito alla prima, mostra correttamente la scritta personalizzata.
Questa cosa mi è tornata utile proprio oggi per xhamster video download.








Commenti»
Articolo interessante e ben fatto …….
…. ma a me non funziona
non crea il file dei cookie e se anche lo creo io a mano non ci scrive nulla dentro …. proprio non considera l’impostazione.
unico output che ottengo è la linea di separazione …. per il resto “il vuoto”
showCookie invece funziona come deve funzionare !
ma c’è qualche cosa da impostare affinche cURL lavori coi cookies ?
grazie
il formato dei file cookie non è il massimo della leggibilità, comunque per vederlo puoi ad esempio leggere da php il file dei cookie salvato.
Qui ci sono le specifiche: Cookie Spec.
Puoi anche usare CURL da riga di comando (c’è per tutte le piattaforme, lo trovi su http://curl.haxx.se ) per salvare il file dei cookies e poi guardartelo con calma, digitando:
curl -c cookie_file.txt http://www.sito.comspero ti sia utile, ciao!
Veramente utilissimo come articolo, però mi sorge un dubbio, se volessi realizzare io il file contenente le variabili cookie da spedire in che formato va scritto?