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.
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.
Preset: past een set veilige standaardwaarden toe in één enkele toewijzing. Met tlspCustom (de standaard) behoudt elke optie de handmatig geconfigureerde waarde. Het instellen van tlspSecureDefaults schakelt VerifyCertificate in, verhoogt Version naar minimaal TLS 1.2 (wanneer een lagere of ongedefinieerde versie was geconfigureerd) en schakelt hostnaamverificatie van het servercertificaat in.
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
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.
Hiermee kunt u authenticeren via OAuth2 of JWT.
Probeert mislukte HTTP-verzoeken automatisch opnieuw met exponentiële backoff en optionele jitter. Nieuwe pogingen zijn standaard uitgeschakeld, dus het gedrag blijft ongewijzigd tenzij Enabled op true wordt gezet. Een verzoek wordt opnieuw geprobeerd wanneer de statuscode van het antwoord in StatusCodes staat of wanneer zich een tijdelijke netwerkfout voordoet (verbinding gesloten, socketfout, verbindings- of leestime-out).
Enabled: schakelt het automatisch opnieuw proberen van mislukte verzoeken in. Standaard false.
MaxRetries: maximumaantal nieuwe pogingen na het initiële verzoek. Standaard 3.
InitialInterval: vertraging in milliseconden vóór de eerste nieuwe poging. Standaard 500.
MaxInterval: maximale vertraging in milliseconden tussen nieuwe pogingen. Standaard 30000.
Multiplier: factor die na elke poging op de vertraging wordt toegepast. Standaard 2.0, waardoor de vertraging bij elke nieuwe poging verdubbelt: 500, 1000, 2000...
Jitter: willekeurige factor tussen 0 en 1 die op elke vertraging wordt toegepast (0.2 laat elke vertraging tot 20% variëren), wat voorkomt dat veel clients op exact hetzelfde moment opnieuw proberen. Standaard 0.2.
HonorRetryAfter: wanneer de server antwoordt met een Retry-After-header (als seconden of als een HTTP-datum, meestal bij een 429- of 503-antwoord), wacht de client de door de server gevraagde tijd in plaats van de berekende backoff-vertraging. Standaard true.
StatusCodes: door komma's gescheiden lijst van HTTP-statuscodes die een nieuwe poging activeren. Standaard "429,502,503,504".
Voorbeeld: maximaal 5 keer opnieuw proberen, beginnend met 1 seconde tussen de pogingen.
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.RetryOptions.Enabled := True;
oHTTP.RetryOptions.MaxRetries := 5;
oHTTP.RetryOptions.InitialInterval := 1000;
ShowMessage(oHTTP.Get('https://www.esegece.com'));
De AI-providerclients (OpenAI, Anthropic, Gemini en de andere LLM-API-clients) gebruiken ditzelfde retry-mechanisme via de eigenschap RetryOptions van hun Options.
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.
In Delphi 2010 en later implementeert de client ook asynchrone verzoeken in future-stijl waarvoor geen enkele event-handler nodig is:
function GetFuture(const AURL: string): IsgcFuture<string>;
function PostFuture(const AURL: string; aData: TStream): IsgcFuture<string>;
Het verzoek wordt uitgevoerd op een achtergrondthread en de geretourneerde future wordt opgelost naar de antwoordbody: roep Await aan om te blokkeren totdat het antwoord arriveert, ThenProc om het in een vervolgactie te verwerken en OnError om fouten af te handelen. Het aanroepen van Cancel breekt het onderliggende HTTP-verzoek af in plaats van het volledig te laten uitvoeren.
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.GetFuture('https://www.esegece.com')
.ThenProc(procedure(const aBody: string)
begin
Log(aBody);
end)
.OnError(procedure(E: Exception)
begin
Log(E.Message);
end);
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;
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.