cURL è una libreria PHP che permette di comunicare con diversi server e diversi protocolli utilizzando la stessa chiamata alla pagina.
In soldoni, l’utilità che cito in questo post è quella di poter chiamare una pagina, e passare variabili e parametri, senza dover per forza aprire una finestra del browser. Utile quindi per iscrizioni a newsletter dopo le registrazioni in determinati siti, o richiami ad altri database per inserire dei valori.
Vediamo come fare.
Abbiamo un form di iscrizione, che dovrà salvare la mail non solo nel db del vostro sito ma anche in quello di un altro servizio di mailing.
1 2 3 4 |
<form action="destinazione.php" method="post"> <input name="email" type="text" /> <input type="submit" /> </form> |
Il file destinazione sarà così (poi vediamo di spiegare il codice)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* salvataggio della mail nel vostro database */ $urlToGrab='http://www.urlesterno.com'; if ('http' != substr($urlToGrab, 0, 4)) $urlToGrab = "http://".$_SERVER['HTTP_HOST'].('/'==substr($urlToGrab,0,1)?'':'/').$urlToGrab; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $urlToGrab); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST); $paginaRenderizzata = curl_exec ($ch); curl_close ($ch); |
Le prime righe contengono il vostro codice di salvataggio dati nel db, al momento non ci interessano.
Dalla riga 4 alla riga 7 imposto l’url esterno, controllando che la sintassi sia corretta.
Si inizializza il puntatore $ch a cui verranno associate diverse opzioni.
Settiamo il CURLOPT_POST a 1, perchè i dati che verranno inviati saranno in formato POST, mentre tramite CURLOPT_POSTFIELDS inseriamo i valori che vogliamo inviare in formato POST. Possono essere inseriti in formato stringa (email=prova@prova.it&nome=thor) oppure come array. Io ho semplicemente passato l’intera variabile globale $_POST, un array che contiene tutti i valori del form.
Nella riga 12 usiamo curl_exec per effettuare la chiamata, e chiudiamo subito dopo il metodo.
In questo modo all’url di destinazione verranno inviate tutte le variabili, e da lì è possibile creare uno script che agisce sulle variabili $_POST.
Ciao Matteo, ho trovato molto interessante questo articolo salvo che non riesco ad ottenere ciò che voglio, dunque ti chiedo se non ho capito lo scopo di cUrl o se basta che io corregga qualcosa.
In sostanza devo spostarmi dal sito A al sito B, durante questo passaggio A deve mandare a B una serie di dati in POST senza utilizzare un form. La navigazione deve proseguire sul sito B.
es.
mi trovo su
http://www.miosito.it/mia_pagina.php
lo script tenta di passare i dati a
http://www.altrosito.it/altra_pagina.php
allora incollo il tuo script cUrl impostando
$urlToGrab=”http://www.altrosito.it/altra_pagina.php”
ma ricevo un “404 not found” in quanto lui cerca
http://www.miosito.it/altra_pagina.php
Come faccio a dirgli che non deve cercare altra_pagina.php su miosito.it bensì su altrosito.php ?
Perché se gli scrivo l’url completa di dominio esterno, lui lo ignora? 🙂
Oppure come dicevo all’inizio cUrl non può fare quello che chiedo?
Spero di essermi spiegato bene
grazie in ogni caso
Marco
Ciao Marco,
il tuo problema è piuttosto strano e l’unica risposta è che sia il server che ospita il tuo sito a limitarti l’accesso a un portale esterno… Immagino che una direttiva del server ti modifichi automaticamente la path base del sito.
Dovresti contattare i gestori del server o informarti se hanno qualche blocco simile.
In alternativa, se non trovi soluzione, potresti affidarti ad Ajax. Ho scritto un articolo di recente che riguardava proprio il passaggio di dati da un sito a un altro esterno. Trovi il link a questo indirizzo:
http://www.manuelmarangoni.it/sir-bit/?p=1482
Ciao Manuel,
Purtroppo mi sono fermato presto nella lettura del tuo articolo, là dove dice che l’altra parte deve inserire una riga di codice nel proprio script… trattandosi dell’interfaccia di pagamento online della banca con cui appunto mi devo interfacciare dal mio sito, dubito che prenderebbero in considerazione tale richiesta 🙂
In realtà l’evitare di passare dal form, che è il metodo che loro forniscono di default, era più un vezzo che una vera necessità; diciamo che mi avrebbe reso il flusso di script un po’ più leggibile. Niente di drammatico cmq.
Ti ringrazio moltissimo cmq per il tuo intervento, con Ajax non sono mai andato oltre le primissime briciole, quindi aggiungo volentieri qualche link su cui studiare!
In effetti le transizioni online hanno sempre una procedura piuttosto rigida…
Auguri per il tuo studio con l’Ajax: all’inizio è un po’ ostico, ma le sue potenzialità sono praticamente infinite : )