TsgcHTTP3Client est un client HTTP/3 (RFC 9114) qui envoie des requêtes HTTP via QUIC et prend en charge les méthodes de requête synchrones et asynchrones.
TsgcHTTP3Client implémente un client HTTP/3 tel que défini dans RFC 9114. HTTP/3 transporte les requêtes et réponses HTTP via QUIC (un transport basé sur UDP avec TLS 1.3 intégré), de sorte que chaque requête est envoyée via une connexion chiffrée et multiplexée sans blocage de tête de ligne. Le client est basé sur le client QUIC natif fourni par OpenSSL 3.5 ou version ultérieure, aucune bibliothèque HTTP/3 externe n'est donc requise.
Le composant peut envoyer des requêtes de manière synchrone (l'appel bloque et retourne le corps de la réponse) ou de manière asynchrone (l'appel retourne immédiatement et la réponse est délivrée sur l'événement OnResponse).
Suivez les étapes ci-dessous pour envoyer une requête synchrone :
1. Créez une nouvelle instance de TsgcHTTP3Client et définissez l'Host et le Port du serveur.
2. Appelez Connect pour ouvrir la connexion QUIC, envoyez la requête avec Get (qui retourne le corps de la réponse) et appelez Disconnect une fois terminé. exemple :
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;
Pour envoyer la requête de manière asynchrone, assignez l'événement OnResponse et appelez GetAsync ; l'appel retourne immédiatement et la réponse est transmise via l'événement. exemple :
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;
| Nom | Description |
|---|---|
| Host | Adresse IP ou nom DNS du serveur HTTP/3 auquel le client se connectera. |
| Port | Port UDP utilisé pour se connecter au serveur HTTP/3 (QUIC). |
| ConnectTimeout | Durée maximale en millisecondes que le client attend pour que la négociation QUIC et TLS 1.3 se termine. |
| TLSOptions | Configure les paramètres TLS 1.3 (certificats, vérification, ALPN) utilisés par la connexion QUIC. |
| Settings | Paramètres SETTINGS HTTP/3 annoncés au serveur lors de l'établissement de la connexion. |
| Nom | Description |
|---|---|
| Connect | Ouvre la connexion QUIC et effectue la négociation TLS 1.3 et HTTP/3. |
| Get | Envoie une requête HTTP/3 GET synchrone et retourne le corps de la réponse. |
| Post | Envoie une requête HTTP/3 POST synchrone avec une charge utile dans le corps. |
| GetAsync | Envoie un GET HTTP/3 non bloquant ; la réponse arrive sur OnResponse. |
| Disconnect | Ferme la connexion HTTP/3 (QUIC). |
| Nom | Description |
|---|---|
| OnResponse | Se déclenche lorsque le client reçoit la réponse complète (statut, en-têtes et corps) du serveur. |
| OnError | Se déclenche lorsqu'une erreur de requête ou de connexion se produit. |
| OnConnect | Se déclenche après l'établissement de la connexion HTTP/3. |
| OnDisconnect | Se déclenche après la fermeture de la connexion HTTP/3. |
L'exemple suivant ouvre une connexion HTTP/3, envoie une requête GET et une requête POST, puis ferme la connexion.
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 activée.sgcHTTP3_Client à la clause uses.TLSOptions.IOHandler = iohOpenSSL (par défaut), qui fournit le client QUIC natif. Avec TLSOptions.IOHandler = iohNativeTLS, le moteur sgc, la poignée de main TLS 1.3 native et la protection native des paquets sont utilisés, et OpenSSL n'est pas chargé.