Fingersi GoogleBot con PHP
mercoledì 13 maggio 2009A 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;
}
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
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.












13 maggio 2009 alle 14:28
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.
13 maggio 2009 alle 14:48
@ Roberto:
Non sarà un errore di sintassi ma è un errore di scrittura del codice. O chiamalo “errore del programmatore”.
13 maggio 2009 alle 15:07
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
13 maggio 2009 alle 15:32
Roberto ha scritto:
Pignoleggiamo: l’input sanitation è un obbligo se vuoi fare le cose come si deve. Stop