Cerca nel blog

Pubblicità

banner-125x125 banner-125x125 banner-125x125 banner-125x125

Feed RSS e Newsletter

Puoi seguire il mio blog abbonandoti al feed RSS, se non sai cos'è un feed RSS prova a guardare questo video... Spiega tutto!

Icona Feed RSS

Twitter

PayPal

Se ti piace questo blog puoi pensare ad una donazione.

Tutti i fondi ricevuti saranno utilizzati per il mio sollazzo personale. :-)

Ultimi commenti...

Napolux: DoZ ha scritto: Grazie, interessante, amo jQuery e la facilità d’uso anche per me che di JS ne capisco poco!...

DoZ: Grazie, interessante, amo jQuery e la facilità d’uso anche per me che di JS ne capisco poco! ps: vedo che...

DoZ: Una volta ho fatto un menù il Flash; dentro c’era un check della data, dopodiché si bloccava. A quei...

DoZ: Prima di tutto un caloroso augurio a tutti coloro che “lavorano gratis”: vuol dire che stanno già...

Napolux: @ Barbara: Sì, dovrei tornare domani :)

Fingersi GoogleBot con PHP

mercoledì 13 maggio 2009
1 Star2 Stars3 Stars4 Stars5 Stars (1 voti, media: 5,00)
Loading ... Loading ...

A volte, per i motivi più disparati, si deve poter "scaricare" una pagina web per farne il parsing dell'HTML alla ricerca di dati da inserire in un nostro database.

Alcuni server però sono "furbi" e intercettano questo tipo di richieste bollandole come "attività sospetta" e restituendo una pagina vuota.

Come ovviare? Questa funzione vi permette di "travestirvi" da GoogleBot e scaricare la vostra paginetta senza troppi problemi. Basta passargli l'url della pagina e vi restituirà l'html risultante in una bella variabilina.

// $url = URL della pagina da scaricare: http://www.miosito.it/pagina.html
function grabPage($url)
{
	// Inizializziamo cURL
	$curl = curl_init();

	// Header della richiesta (messi in un array)
	$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: it-it,it;q=0.5"; // Lingua, da cambiare secondo esigenze...
	$header[] = "Pragma: ";

	// Opzioni cURL
	curl_setopt($curl, CURLOPT_URL, $url);

	// User Agent di GoogleBot, nulla vieta di usarne un altro se volete identificare correttamente il vostro bot...
	curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.google.com/bot.html)');
	curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com');

	curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
	curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
	curl_setopt($curl, CURLOPT_AUTOREFERER, true);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_TIMEOUT, 10);

	$html = curl_exec($curl);
	curl_close($curl);

	// Ritorna HTML
	return $html;
}
Inutile dirvi di non abusare di questa funzione, vero?

La funzione non sarà "eticamente" corretta ma se usata con parsimonia fa il suo sporco lavoro: fino a qualche tempo fa riuscivo anche a scaricare pagine da google stesso con questo giochetto...

Per par condicio vi riporto anche le istruzioni per controllare che googlebot sia veramente chi dice di essere ;)

Questo articolo è stato pubblicato mercoledì, 13 maggio 2009 alle ore 08:19 Se non vuoi perdere nemmeno un articolo del mio blog abbonati al feed RSS. Se non sai cos'è un feed RSS puoi guardare questo video, spiega tutto!

In alternativa puoi abbonarti alla newsletter, riceverai un'email ogni volta che verrà pubblicato un nuovo post. Il tuo indirizzo email sarà gestito da Feedburner.

  

4 Commenti a “Fingersi GoogleBot con PHP”

  1. Roberto scrive:

    Be, il bot di google lo identifichi facilmente dall’IP.

    Cmq per quanto riguarda l’errore del post precedente.
    Un SQL injection non è un errore, ma semplicemente una vulnerabilità del codice.
    :roll:

  2. Napolux scrive:

    @ Roberto:
    Non sarà un errore di sintassi ma è un errore di scrittura del codice. O chiamalo “errore del programmatore”. :)

  3. Roberto scrive:

    Non è nemmeno non errore di scrittura.
    E’ qualcosa che è meglio non fare, ma non è un errore.
    Potrei benissimo aver messo un controllo per verificare che il dato passato è un intero altrimenti uscire prima del’esecuzione.

    L’input sanitation è una buona norma, non un obbligo.

    Lo so sono pignolo dentro…gnegnegne

  4. Napolux scrive:

    Roberto ha scritto:

    L’input sanitation è una buona norma, non un obbligo.
    Lo so sono pignolo dentro…gnegnegne

    Pignoleggiamo: l’input sanitation è un obbligo se vuoi fare le cose come si deve. Stop :P