HTTP/1

TsgcHTTP1Client is een niet-visuele component die overerft van de TIdHTTP Indy-component en enkele nieuwe eigenschappen toevoegt.

Dit component bevindt zich in de unit sgcHTTP.

TLSOptions

Hiermee kunt u configureren hoe verbinding te maken met beveiligde SSL/TLS-servers via het HTTP/1-protocol.

 

ALPNProtocols: lijst van de ALPN-protocollen die naar de server worden verzonden.

RootCertFile: pad naar het basiscertificaatbestand.

CertFile: pad naar het certificaatbestand.

KeyFile: pad naar het certificaatsleutelbestand.

Password: als het certificaat is beveiligd met een wachtwoord, stel het hier in.

VerifyCertificate: als het certificaat moet worden geverifieerd, schakel dan deze eigenschap in. Gebruik het evenement OnSSLVerifyPeer om de SSL-verificatie aan te passen.

VerifyDepth: is een Integer-eigenschap die het maximale aantal koppelingen vertegenwoordigt dat is toegestaan bij verificatie van het X.509-certificaat.

Versie: standaard wordt TLS 1.0 gebruikt. Als de server een hogere TLS-versie vereist, kan deze hier worden geselecteerd.

Proxy: hier kunt u instellen of u via een proxyserver verbinding wilt maken; u kunt verbinding maken met de volgende proxyservers:

pxyHTTP: HTTP-proxyserver.

pxySocks4: SOCKS4-proxyserver.

pxySocks4A: SOCKS4A-proxyserver.

pxySocks5: SOCKS5-proxyserver.

IOHandler: selecteer welke bibliotheek u gebruikt om verbinding te maken via TLS.

iohOpenSSL: gebruikt de OpenSSL-bibliotheek en is de standaard voor Indy-componenten. Vereist het implementeren van OpenSSL-bibliotheken voor win32/win64.

iohSChannel: gebruikt Secure Channel, een beveiligingsprotocol dat door Microsoft voor Windows is geïmplementeerd. Hiervoor hoeven geen OpenSSL-bibliotheken te worden geïmplementeerd. Werkt alleen op Windows 32/64-bits.

OpenSSL_Options: configuration of the openSSL libraries.

APIVersion: maakt het mogelijk te definiëren welke OpenSSL API wordt gebruikt.

oslAPI_1_0: gebruikt API 1.0 OpenSSL, de meest recente versie die door Indy wordt ondersteund

oslAPI_1_1: maakt gebruik van OpenSSL API 1.1; vereist onze aangepaste Indy-bibliotheek en biedt de mogelijkheid OpenSSL 1.1.1-bibliotheken te gebruiken (met TLS 1.3-ondersteuning).

oslAPI_3_0: gebruikt API 3.0 OpenSSL, vereist onze aangepaste Indy-bibliotheek en staat het gebruik van OpenSSL 3.0.0-bibliotheken toe (met TLS 1.3-ondersteuning).

LibPath: hier kunt u configureren waar de OpenSSL-bibliotheken zich bevinden

oslpNone: dit is de standaard. De OpenSSL-bibliotheken moeten zich in dezelfde map als het binaire bestand bevinden of in een bekend pad.

oslpDefaultFolder: stelt automatisch het OpenSSL-pad in waar de bibliotheken zich voor alle IDE-personalities moeten bevinden.

oslpCustomFolder: als deze optie is geselecteerd, definieer dan het volledige pad in de eigenschap LibPathCustom.

LibPathCustom: wanneer LibPath = oslpCustomFolder, definieer hier het volledige pad waar de OpenSSL-bibliotheken zich bevinden.

UnixSymLinks: het laden van symbolische koppelingen onder Unix-systemen in- of uitschakelen (standaard ingeschakeld, behalve onder OSX64):

oslsSymLinksDefault: standaard zijn symlinks ingeschakeld, behalve onder OSX64 (macOS Monterey en later mislukken bij het laden van de bibliotheek zonder versie).

oslsSymLinksLoadFirst: laad symlinks eerst, voordat geprobeerd wordt de versioned libraries te laden.

oslsSymLinksLoad: symbolische koppelingen laden nadat is geprobeerd de versiegebonden bibliotheken te laden.

oslsSymLinksDontLoad: laadt de SymLinks niet.

MinVersion: stel hier de minimumversie in die de client gebruikt om verbinding te maken met een beveiligde server. Standaard is de waarde tlsUndefined, wat betekent dat de minimumversie dezelfde is als die is ingesteld in de eigenschap Version. Voorbeeld: als u de client wilt instellen om alleen verbinding te maken via TLS 1.2 of TLS 1.3, stelt u de volgende waarden in.

 

SSLOptions.Version := tls1_3;

SSLOptions.OpenSSL_Options.MinVersion := tls1_2;

X509Checks: gebruik deze eigenschap om aanvullende X509-certificaatvalidaties in te schakelen:

Mode: selecteer welke opties worden gevalideerd

oslx509chHostName: verifieert het hostnaamcertificaat.

oslx509chIPAddress: verifieert het IP-adres van het certificaat.

HostName: stel de hostnaam in als deze verschilt van het verzoek.

IPAddress: stel het IP-adres in als dit verschilt van het verzoek.

 

SChannel_Options: hiermee kunt u een certificaat uit de Windows-certificaatopslag gebruiken.

CertHash: is de hash van het certificaat. U kunt de certificaathash vinden door een dir-opdracht uit te voeren in PowerShell.

CipherList: hier kunt u instellen welke Ciphers worden gebruikt (gescheiden door ":"). Voorbeeld: CALG_AES_256:CALG_AES_128

CertStoreName: de naam van de store waar het certificaat is opgeslagen. Selecteer een van de volgende:

scsnMY (de standaard)

scsnCA

scsnRoot

scsnTrust

CertStorePath: het opslagpad waar het certificaat is opgeslagen. Selecteer een van de volgende opties:

scspStoreCurrentUser (de standaard)

scspStoreLocalMachine

 

Log

Als de eigenschap Log is ingeschakeld, worden socketberichten opgeslagen in een opgegeven logbestand, wat nuttig is voor foutopsporing.

 

LogOptions.FileName: volledig pad naar de bestandsnaam.

 

Authenticatie

Hiermee kunt u authenticeren via OAuth2 of JWT.

 

 

Asynchrone verzoeken

Standaard gebruikt de HTTP1Client blokkerende aanvragen, dus na het aanroepen van een HTTP-aanvraagmethode wacht de client op de respons van de server. U kunt ook asynchrone methoden gebruiken om deze HTTP-aanvragen in een secundaire thread uit te voeren, waardoor de thread waarin de aanvraag wordt gedaan niet wordt geblokkeerd. De volgende asynchrone methoden zijn geïmplementeerd:

 

 

Na het aanroepen van deze methoden wacht de code niet op het antwoord, maar gaat verder naar de volgende regel, en het antwoord kan worden verwerkt via de gebeurtenis OnAsyncResponse.

 


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

Als er een fout optreedt bij het verwerken van het asynchrone verzoek, wordt de uitzondering gegenereerd in de gebeurtenis OnAsyncException.

 

Voorbeelden

Vraag een GET-methode aan bij een HTTPs-server met TLS 1.2


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

Vraag een GET-methode op HTTPS-server aan met openSSL 1.1 en 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;

Request an Asynchroon POST method and read de reactie using the 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);

 

Vraag een GET-methode aan bij een HTTPs-server met behulp van SChannel voor 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;

Vraag SSE-methode aan om gegevensgebeurtenissen te ontvangen

 


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;

 

Gebeurtenissen

OnSSEMessage

 

De gebeurtenis wordt aangeroepen wanneer een nieuw SSE-bericht wordt ontvangen.

 

OnSSLVerifyPeer

 

Als certificaatverificatie is ingeschakeld, kunt u in deze gebeurtenis het servercertificaat verifiëren en beslissen of u het wilt accepteren.

 

OnSSLGetHandler

 

Dit event wordt geactiveerd voordat de SSL-handler wordt aangemaakt. U kunt hier uw eigen SSL-handler aanmaken (deze moet worden geërvd van TIdServerIOHandlerSSLBase of TIdIOHandlerSSLBase) en de benodigde eigenschappen instellen.

 

OnSSLAfterCreateHandler

 

Als er geen aangepast SSL-object is aangemaakt, wordt er standaard een aangemaakt met de OpenSSL-handler. U kunt de SSL-handlereigenschappen openen en aanpassen indien nodig.

 

OnAsyncResult

 

De gebeurtenis is called after requesting an Async method (using GetAsync, PutAsync... methods). Gebruik de Response parameter to know the result of het verzoek.

 

OnAsyncException

 

Als er een fout optreedt bij het verwerken van een asynchroon verzoek, wordt deze gebeurtenis aangeroepen met de gegenereerde uitzondering.