Fetching a web page with cookies





Spesso mi capita di prendere dati da qualche sito, caricando la pagina che mi interessa in un buffer e poi successivamente farne il parsing.
Un modo semplice per caricare la pagina è tramite la funzione file_get_contents() di php, ma se per accedere alla pagina bisogna effettuare il login al sito, questo metodo non funziona. Per far ciò possiamo utilizzare i socket di php, passando nella nostra richiesta il cookie che otteniamo dopo averci loggato al sito.
Ecco una funzione in php che ci permette di fare questo:

function fetchURL( $url ,$cookie='') {
$page='';
$url_parsed = parse_url($url);
$host = $url_parsed["host"];
$port = $url_parsed["port"];
if ($port==0) $port = 80;
$path = $url_parsed["path"];
if ($url_parsed["query"] != "") $path .= "?".$url_parsed["query"];
if ($cookie<>'') $cookie="Cookie: $cookie\r\n";
$out = "GET $path HTTP/1.0\r\nHost: $host\r\n$cookie\r\n";
$fp = fsockopen($host, $port, $errno, $errstr, 30);
fwrite($fp, $out);
$body = false;
while (!feof($fp)) {
$page.= fgets($fp, 128);
}
fclose($fp);
return $page;
}

nota:
Tale metodo funziona se non sono presenti variabili di sessione. Altrimenti, dovremo prima effettuare il login (modificando la funzione passando le variabili di accesso), fare il parsing della risposta per prelevarci cookie e varaibili di sessioni.
Infine utilizzare questi ultimi valori per prelevare la pagina finale.

Seguimi su twitter : @ironico

Leave a Reply

  

  

  

Per essere informato sui miei contenuti - Email: