Leggere il codice HTML di un sito remoto con cUrl
PHP, Software, Web 2.0, informatica, pillole, programmazione Aggiungi commento
A molti potrebbe essere utile questa funzione per leggere il codice HTML di un sito remoto per reperire informazioni oppure per rispecchiarne la pagina…
Comunque, per qualsiasi utilizzo lo si voglia usare la funzione è la seguente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | function torna_codice($url) { $curl = curl_init(); // Setup headers - I used the same headers from Firefox version 2.0.0.6 // below was split up because php.net said the line was too long. :/ $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; $header[] = "Cache-Control: max-age=0"; $header[] = "Connection: keep-alive"; $header[] = "Keep-Alive: 300"; $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; $header[] = "Accept-Language: en-us,en;q=0.5"; $header[] = "Pragma: "; // browsers keep this blank. $referers = array("google.com", "yahoo.com", "msn.com", "ask.com", "live.com"); $choice = array_rand($referers); $referer = "http://" . $referers[$choice] . ""; $browsers = array("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20060918 Firefox/2.0", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)"); $choice2 = array_rand($browsers); $browser = $browsers[$choice2]; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_USERAGENT, $browser); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_REFERER, $referer); curl_setopt($curl, CURLOPT_AUTOREFERER, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 30); curl_setopt($curl, CURLOPT_MAXREDIRS, 7); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); $data = curl_exec($curl); if ($data === false) { $data = curl_error($curl); } // execute the curl command curl_close($curl); // close the connection return $data; // and finally, return $html } |
Come si vede, la funzione utilizza le librerie cUrl di PHP…
Vi ricordo che nel vostro sito dovete avere abilitato questa libreria, altrimenti la funzione non fungerà..
Ad esempio altervista mette a disposizione questa libreria e la fsockopen per comunicare con host esterni, ma devono essere attivati tramite un semplice sms…
Tuttavia la funzione restituisce, se tutto è andato bene, il codice HTML del sito che è stato passato alla funzione..
Per ottenere il codice potete fare cosi:
1 | $codice = torna_codice("http://www.google.it"); |
Io ho sfruttato questa funzione per prelevare il contenuto del tag
1 2 3 4 5 6 7 | $apri = "http://www.google.it"; if(eregi("<title>(.+)</title>", torna_codice($apri), $titolo)) { $tag_title = $titolo[1]; }else{ $tag_title = $apri; } |
Cioè, se c’è del contenuto nel tag title, il codice inserisce nella variabile il suo contenuto, altrimenti inserisce l’url del sito web passato nella funzione..
Questo è tutto…:-)
- Inviare mail in PHP
- CSS decenti con Styleneat!
- Cambiare immagine al refresh in PHP
- Validare un URL in PHP
- Upload di file in PHP












novembre 21st, 2009 il 13:08
Ottima funzione, ma c’è un problema. Se la pagina è grande non puoi salvare tutto il codice HTML all’interno della variabile. Come aggirare il sistema senza salvare su file?
novembre 21st, 2009 il 23:29
Il massimo contenuto che è possibile assegnare ad una variabile viene configurato dalla configurazione dell’ambiente PHP che sia un hosting o un server locale.
Per questo bisogna modificare le impostazioni per allocare più spazio alle variabili.
Se la pagina è molto grande, mi viene in mente di assegnare a diverse variabili una parte del contenuto spezzettato..
Si può realizzare controllando la lunghezza del contenuto della variabile.
http://php.net/manual/en/function.strlen.php
Ciao,
Simone