TsgcHTTP1Client è un componente non visuale che eredita dal componente indy TIdHTTP e aggiunge alcune nuove proprietà.
Questo componente si trova nell'unità sgcHTTP.
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
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.
Consente di autenticarsi utilizzando OAuth2 o JWT.
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.
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;
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.