HTTP/1

TsgcHTTP1Client è un componente non visuale che eredita dal componente indy TIdHTTP e aggiunge alcune nuove proprietà.

Questo componente si trova nell'unità sgcHTTP.

TLSOptions

Consente di configurare la modalità di connessione a server sicuri SSL/TLS tramite il protocollo HTTP/1.

 

ALPNProtocols: elenco dei protocolli ALPN che verranno inviati al server.

RootCertFile: percorso del file del certificato radice.

CertFile: percorso del file del certificato.

KeyFile: percorso del file della chiave del certificato.

Password: se il certificato è protetto da una password, impostarla qui.

VerifyCertificate: se il certificato deve essere verificato, abiliti questa proprietà. Utilizzi l'evento OnSSLVerifyPeer per personalizzare la verifica SSL.

VerifyDepth: è una proprietà Integer che rappresenta il numero massimo di link consentiti durante la verifica del certificato X.509.

Versione: per impostazione predefinita utilizza TLS 1.0. Se il server richiede una versione TLS superiore, è possibile selezionarla qui.

Proxy: qui è possibile definire se si desidera connettersi tramite un server Proxy; è possibile connettersi ai seguenti server proxy:

pxyHTTP: Server Proxy HTTP.

pxySocks4: Server proxy SOCKS4.

pxySocks4A: Server Proxy SOCKS4A.

pxySocks5: Server Proxy SOCKS5.

IOHandler: selezionare la libreria da utilizzare per connettersi tramite TLS.

iohOpenSSL: utilizza la libreria OpenSSL ed è il predefinito per i componenti Indy. Richiede il deployment delle librerie OpenSSL per win32/win64.

iohSChannel: utilizza Secure Channel, un protocollo di sicurezza implementato da Microsoft per Windows. Non richiede la distribuzione delle librerie OpenSSL. Funziona solo su Windows 32/64 bit.

OpenSSL_Options: configurazione delle librerie openSSL.

APIVersion: consente di definire quale API OpenSSL verrà utilizzata.

oslAPI_1_0: utilizza l'API OpenSSL 1.0, l'ultima supportata da Indy

oslAPI_1_1: utilizza OpenSSL API 1.1, richiede la nostra libreria Indy personalizzata e consente l'utilizzo delle librerie OpenSSL 1.1.1 (con supporto TLS 1.3).

oslAPI_3_0: utilizza l'API 3.0 OpenSSL, richiede la nostra libreria Indy personalizzata e consente l'uso delle librerie OpenSSL 3.0.0 (con supporto TLS 1.3).

LibPath: qui è possibile configurare il percorso in cui si trovano le librerie OpenSSL

oslpNone: questa è l'impostazione predefinita. Le librerie OpenSSL devono trovarsi nella stessa cartella del binario o in un percorso noto.

oslpDefaultFolder: imposta automaticamente il percorso OpenSSL in cui dovrebbero trovarsi le librerie per tutte le personalità dell'IDE.

oslpCustomFolder: se questa è l'opzione selezionata, definire il percorso completo nella proprietà LibPathCustom.

LibPathCustom: quando LibPath = oslpCustomFolder definisca qui il percorso completo dove si trovano le librerie OpenSSL.

UnixSymLinks: abilita o disabilita il caricamento dei SymLink sui sistemi Unix (per impostazione predefinita è abilitato, tranne che su OSX64):

oslsSymLinksDefault: per impostazione predefinita, i symlink sono abilitati eccetto su OSX64 (macOS Monterey e versioni successive non riescono a caricare la libreria con una versione).

oslsSymLinksLoadFirst: carica prima i symlink, prima di tentare di caricare le librerie con versione.

oslsSymLinksLoad: carica i symlink dopo aver tentato di caricare le librerie con versione.

oslsSymLinksDontLoad: non caricare i SymLink.

MinVersion: impostare qui la versione minima che il client utilizzerà per connettersi a un server sicuro. Per impostazione predefinita, il valore è tlsUndefined, il che significa che la versione minima è la stessa impostata nella proprietà Version. Esempio: se si desidera che il client si connetta solo utilizzando TLS 1.2 o TLS 1.3, impostare i seguenti valori.

 

SSLOptions.Version := tls1_3;

SSLOptions.OpenSSL_Options.MinVersion := tls1_2;

X509Checks: utilizzare questa proprietà per abilitare ulteriori validazioni del certificato X509:

Mode: seleziona quali opzioni verranno validate

oslx509chHostName: verifica il certificato dell'hostname.

oslx509chIPAddress: verifica l'indirizzo IP del certificato.

HostName: impostare il nome host se è diverso dalla richiesta.

IPAddress: impostare l'indirizzo IP se è diverso da quello della richiesta.

 

SChannel_Options: consente di utilizzare un certificato dall'archivio certificati di Windows.

CertHash: è l'hash del certificato. È possibile trovare l'hash del certificato eseguendo un comando dir in PowerShell.

CipherList: qui è possibile impostare quali cifrari verranno utilizzati (separati da ":"). Esempio: CALG_AES_256:CALG_AES_128

CertStoreName: il nome dell'archivio in cui è memorizzato il certificato. Selezionare uno dei seguenti:

scsnMY (il valore predefinito)

scsnCA

scsnRoot

scsnTrust

CertStorePath: il percorso dello store in cui è memorizzato il certificato. Selezioni una delle seguenti opzioni:

scspStoreCurrentUser (predefinito)

scspStoreLocalMachine

 

Log

Se la proprietà Log è abilitata, salva i messaggi socket in un file di log specificato, utile per il debug.

 

LogOptions.FileName: percorso completo del file.

 

Autenticazione

Consente di autenticarsi utilizzando OAuth2 o JWT.

 

 

Richieste asincrone

Per impostazione predefinita, HTTP1Client utilizza richieste bloccanti, quindi dopo aver chiamato un metodo di richiesta HTTP, il client attende la risposta dal server. In alternativa, è possibile utilizzare metodi asincroni per eseguire queste richieste HTTP in un thread secondario, evitando di bloccare il thread in cui viene chiamata la richiesta. Sono implementati i seguenti metodi asincroni:

 

 

Dopo aver chiamato questi metodi, invece di attendere la risposta, il codice continua alla riga successiva e la risposta può essere gestita tramite l'evento OnAsyncResponse.

 


procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
    TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);

Se si verifica un errore durante l'elaborazione della richiesta asincrona, l'eccezione verrà sollevata nell'evento OnAsyncException.

 

Esempi

Esegui una richiesta GET al server HTTPs utilizzando TLS 1.2


oHTTP := TsgcHTTP1Client.Create(nil);
Try
  oHTTP.TLSOptions.Version := tls1_2;
  ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
  oHTTP.Free;
End;

Richiede un metodo GET al server HTTPs usando openSSL 1.1 e TLS 1.3


oHTTP := TsgcHTTP1Client.Create(nil);
Try
  oHTTP.TLSOptions.OpenSSL_Options.APIVersion := oslAPI_1_1;
  oHTTP.TLSOptions.Version := tls1_3;
  ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
  oHTTP.Free;
End;

Richiedere un metodo POST asincrono e leggere la risposta tramite OnAsyncResultEvent.

 


procedure OnAsyncExceptionEvent(Sender: TObject; const aThread:
    TsgcThread; const E: Exception);
begin
  Log(E.Message);
end;
procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
    TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);
begin
  if aResponse.ResponseCode = 200 then
    Log('ok', aRequest.Response)
  else 
    Log('error', aRequest.Response);
end;
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.OnAsyncResult := OnAsyncResultEvent;
oHTTP.OnAsyncException := OnAsyncResultEvent;
oRequest := TStringStream.Create('body');
oResponse := TStringStream.Create('');
oHTTP.PostAsync('https://localhost/test', oRequest, oResponse);

 

Richiede un metodo GET a un server HTTPs utilizzando SChannel per Windows.


oHTTP := TsgcHTTP1Client.Create(nil);
Try
  oHTTP.TLSOptions.IOHandler := iohSChannel;
  oHTTP.TLSOptions.Version := tls1_2;
  ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
  oHTTP.Free;
End;

Richiesta del metodo SSE per ottenere eventi dati

 


oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.OnSSEMessage := OnSSEMessageEvent;
oHTTP.GetSSE('https://www.yoursite.com/sse');
 
procedure OnSSEMessageEvent(Sender: TObject; const aMessage: string; var Cancel: Boolean);
begin
  ShowMessage(aMessage);
end;

 

Eventi

OnSSEMessage

 

L'evento viene chiamato quando viene ricevuto un nuovo messaggio SSE.

 

OnSSLVerifyPeer

 

Se la verifica del certificato è abilitata, in questo evento è possibile verificare e decidere se accettare il certificato del server.

 

OnSSLGetHandler

 

Questo evento viene generato prima della creazione dell'handler SSL. Qui è possibile creare il proprio handler SSL (deve essere ereditato da TIdServerIOHandlerSSLBase o TIdIOHandlerSSLBase) e impostare le proprietà necessarie.

 

OnSSLAfterCreateHandler

 

Se non è stato creato un oggetto SSL personalizzato, ne viene creato uno predefinito utilizzando il gestore OpenSSL. È possibile accedere alle proprietà del gestore SSL e modificarle se necessario.

 

OnAsyncResult

 

L'evento viene chiamato dopo la richiesta di un metodo asincrono (tramite i metodi GetAsync, PutAsync...). Utilizzare il parametro Response per conoscere il risultato della richiesta.

 

OnAsyncException

 

Se si verifica un errore durante l'elaborazione di una richiesta asincrona, questo evento viene chiamato con l'eccezione generata.