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.
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;
| Name | Descrição |
|---|---|
| Host | Endereço IP ou nome DNS do servidor HTTP/3 ao qual o cliente irá se conectar. |
| Port | Porta UDP utilizada para conectar ao servidor HTTP/3 (QUIC). |
| ConnectTimeout | Tempo máximo em milissegundos que o cliente aguarda a conclusão do handshake QUIC e TLS 1.3. |
| TLSOptions | Configura os parâmetros TLS 1.3 (certificados, verificação, ALPN) utilizados pela conexão QUIC. |
| Settings | Parâmetros HTTP/3 SETTINGS anunciados ao servidor quando a conexão é estabelecida. |
| Name | Descrição |
|---|---|
| Connect | Abre a conexão QUIC e realiza o handshake TLS 1.3 e HTTP/3. |
| Get | Envia uma requisição HTTP/3 GET síncrona e retorna o corpo da resposta. |
| Post | Envia uma requisição HTTP/3 POST síncrona com payload de corpo. |
| GetAsync | Envia um HTTP/3 GET não bloqueante; a resposta chega em OnResponse. |
| Disconnect | Fecha a conexão HTTP/3 (QUIC). |
| Name | Descrição |
|---|---|
| OnResponse | Disparado 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. |
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;
SGC_HTTP3 habilitado.sgcHTTP3_Client à cláusula uses.TLSOptions.IOHandler = iohOpenSSL (padrão). Com TLSOptions.IOHandler = iohNativeTLS são usados o mecanismo QUIC sgc, o handshake TLS 1.3 nativo e a proteção de pacotes nativa, e o OpenSSL não é carregado.