English
Instant Developer Foundation Documentazione
  • Reference Librerie
  • Libreria Client
  • Libreria Applicazione
  • Altri metodi

Get HTTP

funzione copia link

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

string Response = "" // Risposta del server
// 
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)
}
Se il parametro DatiPost non viene specificato o viene fornito il valore Null il sistema effettua una richiesta di tipo GET. Se, invece, il parametro viene specificato ed è diverso da Null il sistema effettua una richiesta di tipo POST.

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.


  • A partire dalla versione 11.5 sono disponibili anche i seguenti parametri:
  • 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)


  • A partire dalla versione 12.0 è disponibile anche il seguente parametro:
  • 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)


  • A partire dalla versione 12.1 sono disponibili anche i seguenti parametri:
  • 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)


  • A partire dalla versione 15.5 (rimosso nella versione 21.0) è disponibile anche il seguente parametro:
  • 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)


  • A partire dalla versione 21.0 è disponibile anche il seguente parametro:
  • 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)

Ultima modifica: 15/11/2021 / Validità: da 10.0.4300

Vedi Anche

  • ID Map

Hai trovato utile l'articolo?

Grazie per il feedback!

Ti serve altro aiuto?

Consulta il Forum