Spesso si è nella necessità di prelevare il contenuto di una pagina web, per estrapolare dati o per effettuare qualche conversione. Con la seguente funzione è possibile catturare il contenuto di una pagina web , passando i parametri tramite POST.


La funzione accetta l’indirizzo della pagina web e l’elenco dei parametri (gia codificati tramite urlencode) e restutisce la pagina catturata.
I parametri quindi devono essere della forma : ‘var1=xxx&var2=yyy’:
Dove i valori di xxx e yyy devono essere codificati tramite urlencode()

function postURL( $url ,$params) {
 $buffer='';
 $url_parsed = parse_url($url);
 $host = $url_parsed["host"];
 $port = $url_parsed["port"];
 if ($port==0) $port = 80;
 $path = $url_parsed["path"];
 $ContentLength = strlen($params);
 $out = "POST $path HTTP/1.0\r\n".
        "Host: $host\r\n".
        "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5\r\n".
        "Content-Type: application/x-www-form-urlencoded\r\n".
        "Content-Length: $ContentLength\n\n".
        "$params\n";
 $fp = fsockopen($host, $port, $errno, $errstr, 30);
 fwrite($fp, $out);   
 while (!feof($fp)) {
  $buffer.= fgets($fp, 128);
 }  
 fclose($fp);   
 return $buffer;
}



La funzione prima estrapola dall’ url (tramite parse_url) il nome dell’host, il numero della porta, ed il percorso (path). Quindi calcola la lunghezza delle variabili da inviare ($contentLength). A questo punto prepara l’header della richiesta HTTP da effettuare utilizzando questi dati.

Una volta preparato l’header apre una connessione socket con l’host (tramite fsockopen), invia la richiesta e preleva la risposta del server (il contenuto della pagina web) inserendola nella variabile buffer che verra poi restituita alla funzione.

La parte fondamentale di questa funzione è la costruzione dell’Header (contenuta nella variabile $out).

Si chiede al server HTTP di prelevare una pagina situata nel percorso $path, specificando di accettare i parametri tramite POST, quindi imposta il tipo di contenuto a application/x-www-form-urlencoded (necessario per passare i parametri tramite post, come se fossero inviati da una form). A questo punto si accodano i parametri codificati tramite urlencode, dopo averne specificato la lunghezza.

E’ possibile migliorare la funzione in modo da passare i parametri tramite un array ed effettuare l’urlencoding al suo interno.

Per esempio, passando un array in $params di questo tipo : array( ‘var1′=>’xxx’,'var2′=>’yyy’)

Per far ciò bisogna aggiungere le seguenti righe all’inizio della funzione.

foreach ($params as $k=>$v){
     $query[]=$k."=".urlencode($v);
}
$params=implode ('&',$query);

Nell’articolo "Funzione php per tradurre testi utilizzando Google Translator" mostro come  utilizzare questa funzione per tradurre testi tramite google.

Successivamente mostrerò come creare un plugin per wordrpess per tradurre i post in automatico.

11 commenti

Rispondi

Attenzione : Per inserire codice html/php o caratteri speciali utilizza Postable. Postable converte i caratteri speciali del tuo commento.
XHTML: Puoi usare questi tag: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>