Categorie


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()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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.

1
2
3
4
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.

 

« « Ingrandire immagini nelle pagine Web con Javascript Image Magnification | Funzione php per tradurre testi utilizzando Google Translator » »

Articoli correlati

Gestione amici in facebook - Gennaro Varriale.it
Gli amici – Come creare un applicazione per FaceBook (parte 2)

Nel primo articolo Come creare un applicazione per FaceBook abbiamo visto come creare una semplice applicazione, ora vediamo di scoprire le funzioni...


drupal 6
Rilasciato Drupal 6

Dopo un anno di sviluppo, finalmente, è stato rilasciato Drupal 6.0. La nuova versione contiene nuove funzionalità e migliora le caretteristiche...


Prelevare il contenuto di una pagina web passando i parametri via POST (PHP)
Creazione dinamica dei pdf in php tramite FPdf

Tramite la libreria gratuita FPDF possiamo creare facilmente dei file pdf . FPDF non richiede alcuna estensione (eccetto la libreria zlib per attivare...


Seguimi su twitter : @ironico

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> <pre lang="" line="" escaped="" highlight="">