TsgcHTTP3Client es un cliente HTTP/3 (RFC 9114) que envía solicitudes HTTP a través de QUIC y admite métodos de solicitud tanto síncronos como asíncronos.
TsgcHTTP3Client implementa un cliente HTTP/3 tal como se define en RFC 9114. HTTP/3 transporta solicitudes y respuestas HTTP sobre QUIC (un transporte basado en UDP con TLS 1.3 integrado), por lo que cada solicitud se envía a través de una conexión cifrada y multiplexada sin bloqueo de cabeza de línea. El cliente está construido sobre el cliente QUIC nativo proporcionado por OpenSSL 3.5 o posterior, por lo que no se requiere ninguna biblioteca HTTP/3 externa.
El componente puede enviar solicitudes de forma síncrona (la llamada se bloquea y devuelve el cuerpo de la respuesta) o asíncrona (la llamada retorna de inmediato y la respuesta se entrega en el evento OnResponse).
Siga los pasos a continuación para enviar una solicitud síncrona:
1. Cree una nueva instancia de TsgcHTTP3Client y establezca el Host y el Port del servidor.
2. Llame a Connect para abrir la conexión QUIC, envíe la solicitud con Get (que devuelve el cuerpo de la respuesta) y llame a Disconnect cuando termine. ejemplo:
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 la solicitud de forma asíncrona, asigne el evento OnResponse y llame a GetAsync; la llamada retorna inmediatamente y la respuesta se entrega en el evento. ejemplo:
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;
| Nombre | Descripción |
|---|---|
| Host | Dirección IP o nombre DNS del servidor HTTP/3 al que se conectará el cliente. |
| Port | Puerto UDP utilizado para conectarse al servidor HTTP/3 (QUIC). |
| ConnectTimeout | Tiempo máximo en milisegundos que el cliente espera a que se complete el protocolo de enlace QUIC y TLS 1.3. |
| TLSOptions | Configura los parámetros de TLS 1.3 (certificados, verificación, ALPN) utilizados por la conexión QUIC. |
| Settings | Parámetros SETTINGS de HTTP/3 anunciados al servidor cuando se establece la conexión. |
| Nombre | Descripción |
|---|---|
| Connect | Abre la conexión QUIC y realiza el protocolo de enlace TLS 1.3 y HTTP/3. |
| Get | Envía una solicitud HTTP/3 GET síncrona y devuelve el cuerpo de la respuesta. |
| Post | Envía una solicitud HTTP/3 POST síncrona con una carga útil en el cuerpo. |
| GetAsync | Envía un GET HTTP/3 no bloqueante; la respuesta llega en OnResponse. |
| Disconnect | Cierra la conexión HTTP/3 (QUIC). |
| Nombre | Descripción |
|---|---|
| OnResponse | Se dispara cuando el cliente recibe la respuesta completa (estado, cabeceras y cuerpo) del servidor. |
| OnError | Se activa cuando se produce un error de solicitud o de conexión. |
| OnConnect | Se activa después de que se ha establecido la conexión HTTP/3. |
| OnDisconnect | Se activa después de que la conexión HTTP/3 se ha cerrado. |
El siguiente ejemplo abre una conexión HTTP/3, envía una solicitud GET y una POST y cierra la conexión.
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 habilitada.sgcHTTP3_Client a la cláusula uses.TLSOptions.IOHandler = iohOpenSSL (el predeterminado). El motor se detecta entonces al cargar OpenSSL: primero el motor QUIC integrado de OpenSSL, y el motor QUIC sgc como alternativa. Con TLSOptions.IOHandler = iohNativeTLS se usan el motor sgc, el protocolo de enlace TLS 1.3 nativo y la protección de paquetes nativa, y no se carga OpenSSL. El motor sgc también abre los streams de control y QPACK de HTTP/3 y reutiliza una misma conexión QUIC para solicitudes posteriores.