Fetching a web page with cookies - -oldpost-





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.

 

Leave a Reply

Your email address will not be published. Required fields are marked *