TsgcHTTP3Client to klient HTTP/3 (RFC 9114) wysyłający żądania HTTP przez protokół QUIC i obsługujący zarówno synchroniczne, jak i asynchroniczne metody żądań.
TsgcHTTP3Client implementuje klienta HTTP/3 zgodnie z RFC 9114. HTTP/3 przesyła żądania i odpowiedzi HTTP przez QUIC (transport oparty na UDP z wbudowanym TLS 1.3), więc każde żądanie jest wysyłane przez szyfrowane, multipleksowane połączenie bez blokowania nagłówka kolejki. Klient jest zbudowany na natywnym kliencie QUIC dostarczanym przez OpenSSL 3.5 lub nowszy, więc nie jest wymagana żadna zewnętrzna biblioteka HTTP/3.
Komponent może wysyłać żądania synchronicznie (wywołanie blokuje i zwraca treść odpowiedzi) lub asynchronicznie (wywołanie wraca natychmiast, a odpowiedź jest dostarczana przez zdarzenie OnResponse).
Wykonaj poniższe kroki, aby wysłać żądanie synchroniczne:
1. Utwórz nową instancję TsgcHTTP3Client i ustaw Host oraz Port serwera.
2. Wywołaj Connect, aby otworzyć połączenie QUIC, wyślij żądanie przez Get (które zwraca treść odpowiedzi) i wywołaj Disconnect po zakończeniu. Przykład:
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;
Aby wysłać żądanie asynchronicznie, przypisz zdarzenie OnResponse i wywołaj GetAsync; wywołanie wraca natychmiast, a odpowiedź jest dostarczana przez zdarzenie. przykład:
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;
| Nazwa | Opis |
|---|---|
| Host | Adres IP lub nazwa DNS serwera HTTP/3, z którym klient się połączy. |
| Port | Port UDP używany do połączenia z serwerem HTTP/3 (QUIC). |
| ConnectTimeout | Maksymalny czas w milisekundach, jaki klient czeka na zakończenie uzgadniania QUIC i TLS 1.3. |
| TLSOptions | Konfiguruje parametry TLS 1.3 (certyfikaty, weryfikacja, ALPN) używane przez połączenie QUIC. |
| Settings | Parametry SETTINGS HTTP/3 ogłaszane serwerowi podczas nawiązywania połączenia. |
| Nazwa | Opis |
|---|---|
| Connect | Otwiera połączenie QUIC i wykonuje uzgadnianie TLS 1.3 oraz HTTP/3. |
| Get | Wysyła synchroniczne żądanie HTTP/3 GET i zwraca treść odpowiedzi. |
| Post | Wysyła synchroniczne żądanie HTTP/3 POST z ładunkiem treści. |
| GetAsync | Wysyła nieblokujące żądanie HTTP/3 GET; odpowiedź dociera poprzez zdarzenie OnResponse. |
| Disconnect | Zamyka połączenie HTTP/3 (QUIC). |
| Nazwa | Opis |
|---|---|
| OnResponse | Wywoływane, gdy klient otrzymuje pełną odpowiedź (status, nagłówki i treść) od serwera. |
| OnError | Uruchamiane, gdy wystąpi błąd żądania lub połączenia. |
| OnConnect | Uruchamiane po nawiązaniu połączenia HTTP/3. |
| OnDisconnect | Uruchamiane po zamknięciu połączenia HTTP/3. |
Poniższy przykład otwiera połączenie HTTP/3, wysyła żądania GET i POST, a następnie zamyka połączenie.
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.sgcHTTP3_Client do klauzuli uses.TLSOptions.IOHandler = iohOpenSSL (wartość domyślna). Silnik jest wtedy wykrywany przy wczytywaniu OpenSSL: najpierw silnik wbudowany OpenSSL, a jako rezerwowy silnik QUIC sgc. Z TLSOptions.IOHandler = iohNativeTLS używany jest silnik sgc, natywne uzgadnianie TLS 1.3 i natywna ochrona pakietów, a OpenSSL nie jest wczytywany. Silnik sgc otwiera też strumienie kontrolne i QPACK protokołu HTTP/3 i ponownie wykorzystuje jedno połączenie QUIC dla kolejnych żądań.