Scopo
La funzione permette di effettuare una richiesta HTTP verso un server web. Normalmente viene utilizzata per utilizzare una funzionalità messa a disposizione da un altro sito.
Sintassi
//
Response := Application.GetHTTP(Url, dati Post, Username, Password)
Argomenti
Url | E' un parametro di tipo stringa che indica l'URL del server da contattare. Se non inizia né per http:// né per https:// il sistema inserisce automaticamente http:// all'inizio. |
Dati Post | E' un parametro opzionale di tipo IDMap. Vedi le note per ulteriori dettagli |
Username | E' un parametro opzionale di tipo stringa. Se username e password vengono specificati il sistema invia i dati utente (username e password) insieme alla richiesta. Tale parametro è necessario se il server web richiede dati di autenticazione. |
Password | E' un parametro opzionale di tipo stringa. Se username e password vengono specificati il sistema invia i dati utente (username e password) insieme alla richiesta. Tale parametro è necessario se il server web richiede dati di autenticazione. |
Valore di ritorno
Se la risposta HTTP è di tipo TEXT, ovvero se il ContentType inizia con la stringa "text/", allora la funzione restituisce il testo della risposta come stringa. Se la risposta non è di tipo TEXT il sistema restituisce la risposta come BLOB. In questo caso è possibile utilizzare la funzione SaveBlobFile per estrarre il contenuto della risposta e salvarlo su file. Se l'applicazione non utilizza blob nativi il sistema, utilizzando il ContentType, calcola automaticamente un'estensione per il BLOB.
Esempio di codice
// Effettua la richiesta
// *********************
public void Browser.BottoneVai()
{
IDMap idm = null
//
// Faccio la chiamata e salvo la risposta in un file temporaneo
int fileID = EsempiLB.freeFile()
string sNomeFile = EsempiLB.path() + "/temp/" + toString(toInteger(random(...) * 1000000)) + ".html"
EsempiLB.openFileForOutput(sNomeFile, fileID)
EsempiLB.writeLine(fileID, getHTTP(Dati.Url, idm, Dati.Username, Dati.Password))
EsempiLB.closeFile(fileID)
//
// Aggiungo il file temporaneo all'elenco di quelli dal eliminare a fine sessione
EsempiLB.addTempFile(sNomeFile)
}
Tale comportamento automatico può essere cambiato indicando manualmente il tipo di richiesta da effettuare inserendo un apposita chiave dentro alla mappa. Per esempio se si desidera effettuare una richiesta di questo tipo:
http://doc.progamma.com/?ARTID=welcomeè possibile scrivere:
string resp = GetHTTP('doc.progamma.com/?ARTID=welcome')ma è anche possibile scrivere:
IDMap map = new()
map.setValue("ID_TYPE", "GET")
map.setValue("ARTID", "welcome")
string resp = GetHTTP('doc.progamma.com', map)
In questo secondo caso è stato inserito un apposito parametro nella mappa, ID_TYPE, per indicare che occorre effettuare una richiesta di tipo GET anche se è stata specificata la mappa. Il sistema, per le richieste di tipo GET, concatena tutti i parametri, eccetto quelli che iniziano con ID_, sull'URL adattandoli per il web se necessario. Se non fosse stato inserito il valore ID_TYPE nella mappa il sistema avrebbe utilizzato una richiesta di tipo POST ed avrebbe inserito il valore ARTID=welcome all'interno della richiesta e non sull'Url.
Il sistema, attualmente, utilizza i seguenti parametri:
- ID_TYPE: tale parametro può valere GET o POST e serve al sistema per decidere quale tipo di richiesta effettuare. Come indicato sopra se il valore ID_TYPE non viene fornito e si specifica il parametro DatiPost il sistema utilizza POST.
- ID_PROXYURL, ID_PROXYUSERNAME, ID_PROXYPASSWORD: da utilizzare se la richiesta deve essere effettuata utilizzando un server Proxy.
- ID_RESPONSETYPE: tale parametro può valere TEXT o BLOB e serve al sistema per decidere come trattare la risposta; se non viene specificato la risposta viene trattata come testo se il ContentLength è =0 oppure se il ContentType inizia per "text/".
- ID_HEADERS: questo parametro permette sia di specificare Header aggiuntivi da includere nella richiesta HTTP, sia di leggere gli Header della risposta.
Nel primo caso, può essere utile se il server necessita di Header particolari. Per esempio può essere utile se si desidera specificare lo User-Agent per far credere al server che la richiesta provenga da un browser particolare. Per farlo è sufficiente scrivere:IDMap map = new() map.setValue("ID_TYPE", "GET") map.setValue("ID_HEADERS", "User-Agent:Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7") string resp = GetHTTP('URL DEL SERVER', map)
In questo caso la richiesta viene effettuata facendo credere al server che il client sia un iPhone. Se occorre specificare più di un Header è sufficiente concatenarli e separare i vari header con il carattere ACAPO (\n).
Nel secondo caso è sufficiente scrivere:IDArray headers = map.getObject("ID_HEADERS")
È possibile leggere gli Header della risposta solo se è stato specificato il parametro DatiPost perché è l'IDMap passata in tale parametro che conterrà gli Header. - ID_AUTOPROXY: è possibile utilizzare questo parametro per indicare al sistema che deve utilizzare la propria configurazione del Proxy.
Un esempio di implementazione è il seguente:
IDMap map = new() map.setValue("ID_AUTOPROXY", "true") string resp = GetHTTP('URL DEL SERVER', map)
- ID_BODY, ID_BODYTYPE: si è aggiunta la possibilità di specificare il BODY di una richiesta POST.
ID_BODYTYPE permette di specificare il ContentType del BODY.
Un esempio di codice è il seguente:
IDMap map = new() map.setValue("ID_BODY", "CONTENUTO_DEL_BODY") map.setValue("ID_BODYTYPE", "CONTENTTYPE_DEL_BODY") string resp = GetHTTP('URL DEL SERVER', map)
- ID_TIMEOUT: è possibile utilizzare questo parametro per indicare al sistema quanti secondi è necessario attendere prima di annullare il tentativo di connessione. Normalmente viene utilizzato solo se il valore predefinito del sistema (30 secondi in applicazioni web C#/Java, 15 secondi in applicazioni web offline eseguite dentro alla shell nativa) non è quello desiderato.
Un esempio di codice è il seguente:
IDMap map = new() map.setValue("ID_TIMEOUT", 60) string resp = GetHTTP('URL DEL SERVER', map)
- ID_POSTFILE: si è aggiunta la possibilità di inviare un file in una richiesta POST. Un esempio di implementazione è il seguente:
IDMap map = new() map.setValue("ID_POSTFILE", "PATH DEL FILE") string resp = GetHTTP('URL DEL SERVER', map)
- ID_MULTITYPE: se si è utilizzato il parametro ID_POSTFILE, è possibile utilizzare questo parametro per indicare il content type del file. Normalmente viene utilizzato solo se il valore predefinito (multipart/related) non è quello desiderato. Un esempio di codice è il seguente:
IDMap map = new() map.setValue("ID_MULTITYPE", "multipart/form-data") string resp = GetHTTP('URL DEL SERVER', map)
- ID_NOERROR: è possibile utilizzare questo parametro per indicare al sistema che non deve generare errori.
Un esempio di implementazione è il seguente:
IDMap map = new() map.setValue("ID_NOERROR", -1) string resp = GetHTTP('URL DEL SERVER', map)
Se si utilizza la chiave ID_NOERROR e le si assegna il valore True il sistema, dopo aver effettuato la richiesta, aggiunge alla mappa DatiPost la chiave ID_RESPONSECODE il cui valore è il codice della risposta HTTP. In questo modo è possibile leggere sia il body che il codice della risposta delle richieste che generano errori (es: 404). - ID_SAVETO: è possibile utilizzare questo parametro per indicare la locazione su disco dove salvare un file ottenuto come risposta.
Un esempio di implementazione è il seguente:
IDMap map = new() map.setValue("ID_SAVETO", "PATH SUL DISCO DOVE SALVARE IL FILE") string resp = GetHTTP('URL DEL SERVER', map)
- ID_USETLS1.2: è possibile utilizzare questo parametro per indicare al sistema che la richiesta HTTPS deve essere effettuata utilizzando il protocollo TLS v1.2.
Questo protocollo è disponibile per le applicazioni che usano .NET 4.0 o Java a partire dalla versione 7. Un esempio di codice è il seguente:IDMap map = new() map.setValue("ID_USETLS1.2", true) string resp = GetHTTP('URL DEL SERVER', map)
- ID_USEDEFTLS: è possibile utilizzare questo parametro per indicare al sistema che la richiesta HTTPS deve essere effettuata utilizzando il protocollo di sicurezza di default. Se non specificato viene usato TLS 1.2.
Un esempio di codice è il seguente:IDMap map = new() map.setValue("ID_USEDEFTLS", true) string resp = GetHTTP('URL DEL SERVER', map)
A partire dalla versione 11.5 sono disponibili anche i seguenti parametri:
A partire dalla versione 12.0 è disponibile anche il seguente parametro:
A partire dalla versione 12.1 sono disponibili anche i seguenti parametri:
A partire dalla versione 15.5 (rimosso nella versione 21.0) è disponibile anche il seguente parametro:
A partire dalla versione 21.0 è disponibile anche il seguente parametro:
Ultima modifica: 15/11/2021 / Validità: da 10.0.4300