martedì, Novembre 30, 2021
HomeProgrammazionePHPPHP, Scaricare una pagina web utilizzando curl

PHP, Scaricare una pagina web utilizzando curl

Curl è uno dei moduli più potenti di php, permette di inviare post e get a un sito web e di recuperarne il risultato, ci sono molti sistemi per scaricare una pagina web dal propio sito sicuramente usare curl (o una libreria che lo utilizza) è la cosa migliore, questa funzione è il primo passo verso la realizzazione di un bot, diamo un occhiata su come funziona curl…

Vediamo come effettuare una semplice chiamata a una pagina web utilizzando la libreria curl, in questo esempio andremo a fare una ricerca su google, ma la funzione è piuttosto generale e può essere usata con diversi siti, per completezza c’è da aggiungere che per questa operazione si poteva usare anche la funzione get_file_contents nativa di php, tuttavia usando get_file_contents non era possibile settare quasi nulla e molti siti bloccano le richieste da parte di client senza agent o referer settato.
Ecco la funzione getWebPage e il suo uso con google:

 function getWebPage( $url ){
		/**
		 * Qui settiamo le opzioni base, in caso ci fosse bisogno di post si può usare:
	         * CURLOPT_POST 		   => 1,  		//Diciamo a curl che vogliamo usare il post.
		 * CURLOPT_POSTFIELDS 	   => 'parametro1=ciao  //impostiamo i field di post
		**/
        $options = array(
            CURLOPT_RETURNTRANSFER => true,     // ritorna la pagina
            CURLOPT_HEADER                => false,    // non ritornare l'header
	    CURLOPT_REFERER	       => $url, 	// settiamo il referer
            CURLOPT_FOLLOWLOCATION => true,     // seguiamo i redirects
            CURLOPT_ENCODING             => "",       // tutti gli encodings
            CURLOPT_USERAGENT           => "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0",  // L'identità del browser
            CURLOPT_AUTOREFERER        => true,     // setta il referer nel redirect
            CURLOPT_CONNECTTIMEOUT  => 120,      // timeout sulla connessione
            CURLOPT_TIMEOUT                => 120,      // timeout sulla risposta
            CURLOPT_MAXREDIRS           => 10,       // fermati dopo il decimo redirect
        );

        $ch      = curl_init( $url );    // impostiamo l'url per il download
        curl_setopt_array( $ch, $options ); //settiamo le opzioni
        $content = curl_exec( $ch ); //facciamo richiesta della pagina
        $err     = curl_errno( $ch );
        $errmsg  = curl_error( $ch );
        $header  = curl_getinfo( $ch );
        curl_close( $ch );

        $header['errno']   = $err;     //eventuali errori
        $header['errmsg']  = $errmsg;  //header
        $header['content'] = $content; //il contenuto della pagina quello che ci interessa

        return $header['content'];
    }

    //	Chiamata d'esempio
    $query_search = 'BisonTech.net';
    var_dump(getWebPage('http://www.google.it/search?q=' . $query_search));

Una volta ottenuto il codice è possibile parsare o scambiare dati con altri siti usando xml o json.
Come potete vedere nella funzione c’è la possibilità di usare il Post aggiungendo le opzioni CURLOPT_POST e CURLOPT_POSTFIELDS, tuttavia se vi serve il post forse dovreste prendere in considerazione qualcosa di più alto livello delle chiamate dirette al curl, un buon esempio è l’oggetto Zend_Http_Client dello Zend Framework che offre un vero e proprio client web.
Attenzione: NON abusate di questo sistema poichè molti siti (compreso google) bannano gli ip se si usa il loro servizio con sistemi automatici. Inoltre se dovete usare funzioni del genere in produzione su siti di medio/alto traffico consiglio di prevedere una sorta di sistema di cache ne gioverà sia il vostro sito che quello target, ad esempio se 2 utenti nel giro di 1 ora fanno la stessa ricerca su google, è inutile ripetere la ricerca basta memorizzare il risultato da qualche parte in locale e restituire quello alla seconda ricerca.

 

Stefano
Sono un amante della tecnologia, appassionato di programmazione, marketing e videogames. Adoro sperimentare tutto ciò che la tecnologia ha da offrire.

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Most Popular