TsgcHTTP3Client

TsgcHTTP3Client is een HTTP/3-client (RFC 9114) die HTTP-aanvragen via QUIC verstuurt en zowel synchrone als asynchrone aanvraagmethoden ondersteunt.

Inleiding

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;

Referentie

Belangrijkste Eigenschappen

NaamBeschrijving
HostIP-adres of DNS-naam van de HTTP/3-server waarmee de client verbinding maakt.
PortUDP-poort die wordt gebruikt om verbinding te maken met de HTTP/3 (QUIC)-server.
ConnectTimeoutMaximale tijd in milliseconden die de client wacht tot de QUIC- en TLS 1.3-handshake is voltooid.
TLSOptionsConfigureert de TLS 1.3-parameters (certificaten, verificatie, ALPN) die worden gebruikt door de QUIC-verbinding.
SettingsHTTP/3 SETTINGS-parameters die aan de server worden aangekondigd wanneer de verbinding tot stand wordt gebracht.

Belangrijkste Methoden

NaamBeschrijving
ConnectOpent de QUIC-verbinding en voert de TLS 1.3- en HTTP/3-handshake uit.
GetVerstuurt een synchroon HTTP/3 GET-verzoek en retourneert de antwoordbody.
PostVerstuurt een synchroon HTTP/3 POST-verzoek met een body-payload.
GetAsyncVerstuurt een niet-blokkerend HTTP/3 GET; het antwoord arriveert via OnResponse.
DisconnectSluit de HTTP/3 (QUIC)-verbinding.

Belangrijkste Gebeurtenissen

NaamBeschrijving
OnResponseWordt geactiveerd wanneer de client het volledige antwoord (status, headers en body) van de server ontvangt.
OnErrorWordt geactiveerd wanneer een verzoek- of verbindingsfout optreedt.
OnConnectWordt geactiveerd nadat de HTTP/3-verbinding tot stand is gebracht.
OnDisconnectWordt geactiveerd nadat de HTTP/3-verbinding is gesloten.

Volledig voorbeeld

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;

Vereisten