TsgcHTTP3Client

TsgcHTTP3Client é um cliente HTTP/3 (RFC 9114) que envia requisições HTTP por meio do QUIC e suporta métodos de requisição síncronos e assíncronos.

Introdução

TsgcHTTP3Client implementa um cliente HTTP/3 conforme definido na RFC 9114. HTTP/3 transporta requisições e respostas HTTP via QUIC (um transporte baseado em UDP com TLS 1.3 integrado), portanto cada requisição é enviada por uma conexão criptografada e multiplexada sem bloqueio de head-of-line. O cliente é construído sobre o cliente QUIC nativo fornecido pelo OpenSSL 3.5 ou posterior, portanto nenhuma biblioteca HTTP/3 externa é necessária.

O componente pode enviar requisições de forma síncrona (a chamada bloqueia e retorna o corpo da resposta) ou assíncrona (a chamada retorna imediatamente e a resposta é entregue no evento OnResponse).

Siga os passos abaixo para enviar uma requisição síncrona:

1. Crie uma nova instância de TsgcHTTP3Client e defina o Host e o Port do servidor.

2. Chame Connect para abrir a conexão QUIC, envie a requisição com Get (que retorna o corpo da resposta) e chame Disconnect ao concluir. exemplo:


    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;

Para enviar a requisição de forma assíncrona, atribua o evento OnResponse e chame GetAsync; a chamada retorna imediatamente e a resposta é entregue no evento. exemplo:


    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;

Referência

Principais Propriedades

NameDescrição
HostEndereço IP ou nome DNS do servidor HTTP/3 ao qual o cliente irá se conectar.
PortPorta UDP utilizada para conectar ao servidor HTTP/3 (QUIC).
ConnectTimeoutTempo máximo em milissegundos que o cliente aguarda a conclusão do handshake QUIC e TLS 1.3.
TLSOptionsConfigura os parâmetros TLS 1.3 (certificados, verificação, ALPN) utilizados pela conexão QUIC.
SettingsParâmetros HTTP/3 SETTINGS anunciados ao servidor quando a conexão é estabelecida.

Métodos Principais

NameDescrição
ConnectAbre a conexão QUIC e realiza o handshake TLS 1.3 e HTTP/3.
GetEnvia uma requisição HTTP/3 GET síncrona e retorna o corpo da resposta.
PostEnvia uma requisição HTTP/3 POST síncrona com payload de corpo.
GetAsyncEnvia um HTTP/3 GET não bloqueante; a resposta chega em OnResponse.
DisconnectFecha a conexão HTTP/3 (QUIC).

Eventos Principais

NameDescrição
OnResponseDisparado quando o cliente recebe a resposta completa (status, cabeçalhos e corpo) do servidor.
OnErrorÉ disparado quando ocorre um erro de requisição ou de conexão.
OnConnectÉ disparado após a conexão HTTP/3 ser estabelecida.
OnDisconnectÉ disparado após a conexão HTTP/3 ter sido fechada.

Exemplo Completo

O exemplo a seguir abre uma conexão HTTP/3, envia uma requisição GET e uma requisição POST e fecha a conexão.


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;

Requisitos