HTTP/1

TsgcHTTP1Client est un composant non visuel qui hérite du composant Indy TIdHTTP et ajoute quelques nouvelles propriétés.

Ce composant se trouve dans l'unité sgcHTTP.

TLSOptions

Vous permet de configurer la façon de se connecter aux serveurs SSL/TLS sécurisés en utilisant le protocole HTTP/1.

 

ALPNProtocols : liste des protocoles ALPN qui seront envoyés au serveur.

RootCertFile : chemin vers le fichier de certificat racine.

CertFile : chemin vers le fichier de certificat.

KeyFile : chemin vers le fichier de clé du certificat.

Password : si le certificat est sécurisé par un mot de passe, définissez-le ici.

VerifyCertificate : si le certificat doit être vérifié, activez cette propriété. Utilisez l'événement OnSSLVerifyPeer pour personnaliser la vérification SSL.

VerifyDepth : est une propriété Integer représentant le nombre maximum de liens autorisés lors de la vérification du certificat X.509.

Version : par défaut utilise TLS 1.0. Si le serveur nécessite une version TLS plus élevée, elle peut être sélectionnée ici.

Proxy : ici vous pouvez définir si vous souhaitez vous connecter via un serveur proxy ; les serveurs proxy suivants sont disponibles :

pxyHTTP : serveur proxy HTTP.

pxySocks4 : Serveur Proxy SOCKS4.

pxySocks4A : Serveur Proxy SOCKS4A.

pxySocks5 : serveur proxy SOCKS5.

IOHandler : sélectionnez la bibliothèque que vous utiliserez pour vous connecter via TLS.

iohOpenSSL : utilise la bibliothèque OpenSSL et est la valeur par défaut pour les composants Indy. Nécessite le déploiement des bibliothèques OpenSSL pour win32/win64.

iohSChannel : utilise Secure Channel, un protocole de sécurité implémenté par Microsoft pour Windows. Il ne nécessite pas le déploiement de bibliothèques OpenSSL. Fonctionne uniquement sous Windows 32/64 bits.

OpenSSL_Options : configuration des bibliothèques openSSL.

APIVersion : permet de définir quelle API OpenSSL sera utilisée.

oslAPI_1_0 : utilise l'API 1.0 OpenSSL, la dernière version prise en charge par Indy

oslAPI_1_1 : utilise l'API 1.1 OpenSSL, nécessite notre bibliothèque Indy personnalisée et permet d'utiliser les bibliothèques OpenSSL 1.1.1 (avec prise en charge de TLS 1.3).

oslAPI_3_0 : utilise l'API OpenSSL 3.0, nécessite notre bibliothèque Indy personnalisée et permet d'utiliser les bibliothèques OpenSSL 3.0.0 (avec prise en charge de TLS 1.3).

LibPath : ici vous pouvez configurer l'emplacement des bibliothèques OpenSSL

oslpNone : c'est la valeur par défaut. Les bibliothèques OpenSSL doivent se trouver dans le même dossier que le binaire ou dans un chemin connu.

oslpDefaultFolder : définit automatiquement le chemin OpenSSL où les bibliothèques doivent être situées pour toutes les personnalités IDE.

oslpCustomFolder : si cette option est sélectionnée, définissez le chemin complet dans la propriété LibPathCustom.

LibPathCustom : lorsque LibPath = oslpCustomFolder, définissez ici le chemin complet où se trouvent les bibliothèques OpenSSL.

UnixSymLinks : activer ou désactiver le chargement des liens symboliques sous les systèmes Unix (activé par défaut, sauf sous OSX64) :

oslsSymLinksDefault : par défaut, les liens symboliques sont activés sauf sous OSX64 (macOS Monterey et versions ultérieures échouent lors du chargement de la bibliothèque sans version).

oslsSymLinksLoadFirst : charger les liens symboliques en premier, avant d'essayer de charger les bibliothèques versionnées.

oslsSymLinksLoad : charger les liens symboliques après avoir tenté de charger les bibliothèques versionnées.

oslsSymLinksDontLoad : ne pas charger les SymLinks.

MinVersion : définissez ici la version minimale que le client utilisera pour se connecter à un serveur sécurisé. Par défaut, la valeur est tlsUndefined, ce qui signifie que la version minimale est la même que celle définie dans la propriété Version. Exemple : si vous souhaitez que le client se connecte uniquement en TLS 1.2 ou TLS 1.3, définissez les valeurs suivantes.

 

SSLOptions.Version := tls1_3;

SSLOptions.OpenSSL_Options.MinVersion := tls1_2;

X509Checks : utilisez cette propriété pour activer des validations de certificat X509 supplémentaires :

Mode : sélectionner quelles options seront validées

oslx509chHostName : vérifie le certificat du nom d'hôte.

oslx509chIPAddress : vérifie l'adresse IP du certificat.

HostName : définissez le nom d'hôte s'il est différent de la requête.

IPAddress : définissez l'adresse IP si elle est différente de celle de la requête.

 

SChannel_Options : vous permet d'utiliser un certificat depuis le magasin de certificats Windows.

CertHash : il s'agit du hachage du certificat. Vous pouvez trouver le hachage du certificat en exécutant une commande dir dans PowerShell.

CipherList : vous pouvez définir ici les chiffrements à utiliser (séparés par ":"). Exemple : CALG_AES_256:CALG_AES_128

CertStoreName : le nom du magasin où le certificat est stocké. Sélectionnez l'une des options suivantes :

scsnMY (la valeur par défaut)

scsnCA

scsnRoot

scsnTrust

CertStorePath : le chemin du magasin où le certificat est stocké. Sélectionnez l'une des options suivantes :

scspStoreCurrentUser (valeur par défaut)

scspStoreLocalMachine

 

Journal

Si la propriété Log est activée, elle enregistre les messages socket dans un fichier journal spécifié, ce qui est utile pour le débogage.

 

LogOptions.FileName : chemin complet vers le fichier.

 

Authentification

Vous permet de vous authentifier en utilisant OAuth2 ou JWT.

 

 

Requêtes asynchrones

Par défaut, HTTP1Client utilise des requêtes bloquantes, donc après avoir appelé une méthode de requête HTTP, le client attend la réponse du serveur. Alternativement, vous pouvez utiliser des méthodes asynchrones pour exécuter ces requêtes HTTP dans un thread secondaire, évitant ainsi de bloquer le thread où la requête est appelée. Les méthodes asynchrones suivantes sont implémentées :

 

 

Après avoir appelé ces méthodes, au lieu d'attendre la réponse, le code continue à la ligne suivante, et la réponse peut être gérée à l'aide de l'événement OnAsyncResponse.

 


procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
    TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);

S'il y a une erreur lors du traitement de la requête asynchrone, l'exception sera levée dans l'événement OnAsyncException.

 

Exemples

Effectuer une requête GET vers un serveur HTTPS en utilisant TLS 1.2


oHTTP := TsgcHTTP1Client.Create(nil);
Try
  oHTTP.TLSOptions.Version := tls1_2;
  ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
  oHTTP.Free;
End;

Effectuer une requête GET vers un serveur HTTPs en utilisant openSSL 1.1 et TLS 1.3


oHTTP := TsgcHTTP1Client.Create(nil);
Try
  oHTTP.TLSOptions.OpenSSL_Options.APIVersion := oslAPI_1_1;
  oHTTP.TLSOptions.Version := tls1_3;
  ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
  oHTTP.Free;
End;

Demandez une méthode POST asynchrone et lisez la réponse à l'aide de l'événement OnAsyncResultEvent.

 


procedure OnAsyncExceptionEvent(Sender: TObject; const aThread:
    TsgcThread; const E: Exception);
begin
  Log(E.Message);
end;
procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
    TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);
begin
  if aResponse.ResponseCode = 200 then
    Log('ok', aRequest.Response)
  else 
    Log('error', aRequest.Response);
end;
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.OnAsyncResult := OnAsyncResultEvent;
oHTTP.OnAsyncException := OnAsyncResultEvent;
oRequest := TStringStream.Create('body');
oResponse := TStringStream.Create('');
oHTTP.PostAsync('https://localhost/test', oRequest, oResponse);

 

Effectuez une requête GET vers un serveur HTTPs en utilisant SChannel pour Windows.


oHTTP := TsgcHTTP1Client.Create(nil);
Try
  oHTTP.TLSOptions.IOHandler := iohSChannel;
  oHTTP.TLSOptions.Version := tls1_2;
  ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
  oHTTP.Free;
End;

Demander la méthode SSE pour obtenir des événements de données

 


oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.OnSSEMessage := OnSSEMessageEvent;
oHTTP.GetSSE('https://www.yoursite.com/sse');
 
procedure OnSSEMessageEvent(Sender: TObject; const aMessage: string; var Cancel: Boolean);
begin
  ShowMessage(aMessage);
end;

 

Événements

OnSSEMessage

 

L'événement est appelé lorsqu'un nouveau message SSE est reçu.

 

OnSSLVerifyPeer

 

Si la vérification du certificat est activée, dans cet événement vous pouvez vérifier et décider d'accepter ou non le certificat du serveur.

 

OnSSLGetHandler

 

Cet événement est déclenché avant la création du gestionnaire SSL. Vous pouvez créer votre propre gestionnaire SSL ici (il doit hériter de TIdServerIOHandlerSSLBase ou TIdIOHandlerSSLBase) et définir les propriétés nécessaires.

 

OnSSLAfterCreateHandler

 

Si aucun objet SSL personnalisé n'a été créé, un objet par défaut est créé à l'aide du gestionnaire OpenSSL. Vous pouvez accéder aux propriétés du gestionnaire SSL et les modifier si nécessaire.

 

OnAsyncResult

 

L'événement est appelé après la requête d'une méthode Async (en utilisant les méthodes GetAsync, PutAsync...). Utilisez le paramètre Response pour connaître le résultat de la requête.

 

OnAsyncException

 

Si une erreur survient lors du traitement d'une requête asynchrone, cet événement est appelé avec l'exception levée.