TsgcHTTP3Client is een HTTP/3-client (RFC 9114) die HTTP-aanvragen via QUIC verstuurt en zowel synchrone als asynchrone aanvraagmethoden ondersteunt.
TsgcHTTP3Client implementeert een HTTP/3-client zoals gedefinieerd in RFC 9114. HTTP/3 transporteert HTTP-verzoeken en -antwoorden via QUIC (een UDP-gebaseerd transport met ingebouwde TLS 1.3), zodat elk verzoek via een versleutelde, gemultiplexte verbinding zonder head-of-line-blokkering wordt verstuurd. De client vereist standaard (TLSOptions.IOHandler = iohOpenSSL) OpenSSL 3.5 of hoger, de eerste release met native QUIC: de ingebouwde OpenSSL QUIC-engine wordt als eerste geprobeerd, met de sgc QUIC-engine als terugval. Met TLSOptions.IOHandler = iohNativeTLS worden de sgc-engine, de native TLS 1.3-handshake en de native pakketbescherming gebruikt, en wordt geen OpenSSL geladen; de sgc-engine opent dan ook de HTTP/3 control- en QPACK-streams en hergebruikt één QUIC-verbinding voor latere aanvragen.
De component kan verzoeken synchroon versturen (de aanroep blokkeert en retourneert de antwoordbody) of asynchroon (de aanroep keert onmiddellijk terug en het antwoord wordt geleverd via de OnResponse-gebeurtenis).
Volg de onderstaande stappen om een synchroon verzoek te verzenden:
1. Maak een nieuw exemplaar van TsgcHTTP3Client aan en stel de Host en Port van de server in.
2. Roep Connect aan om de QUIC-verbinding te openen, verstuur de aanvraag met Get (dat de antwoordtekst retourneert) en roep Disconnect aan wanneer u klaar bent. voorbeeld:
oClient := TsgcHTTP3Client.Create(nil);
oClient.Host := 'www.example.com';
oClient.Port := 443;
oClient.Connect(oClient.Host, oClient.Port);
vResponse := oClient.Get('https://www.example.com/');
ShowMessage(vResponse);
oClient.Disconnect;
Om het verzoek asynchroon te versturen, wijs de OnResponse-gebeurtenis toe en roep GetAsync aan; de aanroep keert onmiddellijk terug en het antwoord wordt via de gebeurtenis afgeleverd. voorbeeld:
oClient := TsgcHTTP3Client.Create(nil);
oClient.OnResponse := OnResponseEvent;
oClient.GetAsync('https://www.example.com/');
procedure OnResponseEvent(Sender: TObject; const Response: TsgcHTTP3Response);
begin
ShowMessage(Response.DataString);
end;
| Naam | Beschrijving |
|---|---|
| Host | IP-adres of DNS-naam van de HTTP/3-server waarmee de client verbinding maakt. |
| Port | UDP-poort die wordt gebruikt om verbinding te maken met de HTTP/3 (QUIC)-server. |
| ConnectTimeout | Maximale tijd in milliseconden die de client wacht tot de QUIC- en TLS 1.3-handshake is voltooid. |
| TLSOptions | Configureert de TLS 1.3-parameters (certificaten, verificatie, ALPN) die worden gebruikt door de QUIC-verbinding. |
| Settings | HTTP/3 SETTINGS-parameters die aan de server worden aangekondigd wanneer de verbinding tot stand wordt gebracht. |
| Naam | Beschrijving |
|---|---|
| Connect | Opent de QUIC-verbinding en voert de TLS 1.3- en HTTP/3-handshake uit. |
| Get | Verstuurt een synchroon HTTP/3 GET-verzoek en retourneert de antwoordbody. |
| Post | Verstuurt een synchroon HTTP/3 POST-verzoek met een body-payload. |
| GetAsync | Verstuurt een niet-blokkerend HTTP/3 GET; het antwoord arriveert via OnResponse. |
| Disconnect | Sluit de HTTP/3 (QUIC)-verbinding. |
| Naam | Beschrijving |
|---|---|
| OnResponse | Wordt geactiveerd wanneer de client het volledige antwoord (status, headers en body) van de server ontvangt. |
| OnError | Wordt geactiveerd wanneer een verzoek- of verbindingsfout optreedt. |
| OnConnect | Wordt geactiveerd nadat de HTTP/3-verbinding tot stand is gebracht. |
| OnDisconnect | Wordt geactiveerd nadat de HTTP/3-verbinding is gesloten. |
Het volgende voorbeeld opent een HTTP/3-verbinding, verstuurt een GET- en een POST-verzoek en sluit de verbinding.
var
oClient: TsgcHTTP3Client;
vResponse: string;
begin
oClient := TsgcHTTP3Client.Create(nil);
try
oClient.Host := 'www.example.com';
oClient.Port := 443;
oClient.ConnectTimeout := 10000;
oClient.Connect(oClient.Host, oClient.Port);
if oClient.Connected then
begin
vResponse := oClient.Get('https://www.example.com/');
ShowMessage(vResponse);
vResponse := oClient.Post('https://www.example.com/api', 'name=value',
'application/x-www-form-urlencoded');
ShowMessage(vResponse);
end;
oClient.Disconnect;
finally
oClient.Free;
end;
end;
SGC_HTTP3 voorwaardelijke definitie ingeschakeld.sgcHTTP3_Client toe aan de uses-clausule.TLSOptions.IOHandler = iohOpenSSL (standaard). Met iohNativeTLS is geen OpenSSL nodig.