TsgcHTTP1Client ist eine nicht-visuelle Komponente, die von der Indy-Komponente TIdHTTP erbt und einige neue Eigenschaften hinzufügt.
Diese Komponente befindet sich in der Unit sgcHTTP.
Ermöglicht es Ihnen zu konfigurieren, wie eine Verbindung zu sicheren SSL/TLS-Servern über das HTTP/1-Protokoll hergestellt wird.
ALPNProtocols: Liste der ALPN-Protokolle, die an den Server gesendet werden.
RootCertFile: Pfad zur Root-Zertifikatdatei.
CertFile: Pfad zur Zertifikatsdatei.
KeyFile: Pfad zur Zertifikatsschlüsseldatei.
Password: wenn das Zertifikat mit einem Passwort gesichert ist, geben Sie es hier ein.
VerifyCertificate: wenn das Zertifikat verifiziert werden muss, aktivieren Sie diese Eigenschaft. Verwenden Sie das Ereignis OnSSLVerifyPeer , um die SSL-Verifizierung anzupassen.
VerifyDepth: ist eine Integer-Eigenschaft, die die maximale Anzahl von Verknüpfungen darstellt, die zulässig sind, wenn die Überprüfung für das X.509-Zertifikat durchgeführt wird.
Version: verwendet standardmäßig TLS 1.0. Wenn der Server eine höhere TLS-Version erfordert, kann sie hier ausgewählt werden.
Preset: wendet einen Satz sicherer Standardwerte in einer einzigen Zuweisung an. Mit tlspCustom (dem Standard) behält jede Option den manuell konfigurierten Wert. Das Setzen von tlspSecureDefaults aktiviert VerifyCertificate, hebt Version auf mindestens TLS 1.2 an (wenn eine niedrigere oder nicht definierte Version konfiguriert war) und aktiviert die Hostnamen-Überprüfung des Serverzertifikats.
Proxy: hier können Sie definieren, ob Sie sich über einen Proxy-Server verbinden möchten; Sie können sich mit den folgenden Proxy-Servern verbinden:
pxyHTTP: HTTP-Proxy-Server.
pxySocks4: SOCKS4-Proxy-Server.
pxySocks4A: SOCKS4A-Proxy-Server.
pxySocks5: SOCKS5-Proxy-Server.
IOHandler: wählen Sie aus, welche Bibliothek Sie zur Verbindung über TLS verwenden.
iohOpenSSL: verwendet die OpenSSL-Bibliothek und ist der Standard für Indy-Komponenten. Erfordert das Bereitstellen von OpenSSL-Bibliotheken für win32/win64.
iohSChannel: verwendet Secure Channel, ein von Microsoft für Windows implementiertes Sicherheitsprotokoll. Es erfordert nicht die Bereitstellung von OpenSSL-Bibliotheken. Funktioniert nur unter Windows 32/64 Bit.
OpenSSL_Options: Konfiguration der OpenSSL-Bibliotheken.
APIVersion: ermöglicht die Definition, welche OpenSSL-API verwendet wird.
oslAPI_1_0: verwendet API 1.0 OpenSSL, es ist die neueste von Indy unterstützte
oslAPI_1_1: verwendet API-1.1-OpenSSL, erfordert unsere benutzerdefinierte Indy-Bibliothek und ermöglicht die Verwendung von OpenSSL-1.1.1-Bibliotheken (mit TLS-1.3-Unterstützung).
oslAPI_3_0: verwendet API 3.0 OpenSSL, erfordert unsere benutzerdefinierte Indy-Bibliothek und ermöglicht die Verwendung von OpenSSL-3.0.0-Bibliotheken (mit TLS-1.3-Unterstützung).
LibPath: hier können Sie konfigurieren, wo sich die OpenSSL-Bibliotheken befinden
oslpNone: dies ist der Standard. Die OpenSSL-Bibliotheken sollten sich im selben Ordner wie die Binärdatei oder in einem bekannten Pfad befinden.
oslpDefaultFolder: setzt automatisch den OpenSSL-Pfad, in dem sich die Bibliotheken für alle IDE-Personalities befinden sollen.
oslpCustomFolder: wenn dies die ausgewählte Option ist, definieren Sie den vollständigen Pfad in der Eigenschaft LibPathCustom.
LibPathCustom: wenn LibPath = oslpCustomFolder ist, definieren Sie hier den vollständigen Pfad, in dem sich die OpenSSL-Bibliotheken befinden.
UnixSymLinks: aktiviert oder deaktiviert das Laden von SymLinks unter Unix-Systemen (standardmäßig aktiviert, außer unter OSX64):
oslsSymLinksDefault: Standardmäßig sind Symlinks aktiviert, außer unter OSX64 (macOS Monterey und neuer schlagen beim Versuch fehl, die Bibliothek ohne Version zu laden).
oslsSymLinksLoadFirst: lädt zuerst Symlinks, bevor versucht wird, die versionierten Bibliotheken zu laden.
oslsSymLinksLoad: lädt Symlinks, nachdem versucht wurde, die versionierten Bibliotheken zu laden.
oslsSymLinksDontLoad: lädt die SymLinks nicht.
MinVersion: Legen Sie hier die Mindestversion fest, die der Client zum Verbinden mit einem sicheren Server verwendet. Standardmäßig ist der Wert tlsUndefined, was bedeutet, dass die Mindestversion dieselbe ist, die in der Eigenschaft Version festgelegt wurde. Beispiel: Wenn Sie möchten, dass der Client nur über TLS 1.2 oder TLS 1.3 verbindet, legen Sie die folgenden Werte fest.
SSLOptions.Version := tls1_3;
SSLOptions.OpenSSL_Options.MinVersion := tls1_2;
X509Checks: verwenden Sie diese Eigenschaft, um zusätzliche X509-Zertifikatsvalidierungen zu aktivieren:
Mode: wählt aus, welche Optionen validiert werden
oslx509chHostName: verifiziert das Hostnamen-Zertifikat.
oslx509chIPAddress: verifiziert die IP-Adresse des Zertifikats.
HostName: setzt den Hostnamen, wenn er sich von der Anfrage unterscheidet.
IPAddress: legen Sie die IP-Adresse fest, falls sie von der Anfrage abweicht.
SChannel_Options: ermöglicht die Verwendung eines Zertifikats aus dem Windows-Zertifikatspeicher.
CertHash: ist der Zertifikats-Hash. Sie können den Zertifikats-Hash finden, indem Sie einen dir-Befehl in PowerShell ausführen.
CipherList: hier können Sie festlegen, welche Cipher verwendet werden (getrennt durch ":"). Beispiel: CALG_AES_256:CALG_AES_128
CertStoreName: der Speichername, in dem das Zertifikat abgelegt ist. Wählen Sie einen der folgenden aus:
scsnMY (der Standardwert)
scsnCA
scsnRoot
scsnTrust
CertStorePath: der Speicherpfad, in dem das Zertifikat abgelegt ist. Wählen Sie einen der folgenden:
scspStoreCurrentUser (der Standard)
scspStoreLocalMachine
Wenn die Eigenschaft Log aktiviert ist, werden Socket-Nachrichten in einer angegebenen Protokolldatei gespeichert, was beim Debuggen nützlich ist.
LogOptions.FileName: vollständiger Pfad zum Dateinamen.
Ermöglicht die Authentifizierung mit OAuth2 oder JWT.
Wiederholt fehlgeschlagene HTTP-Anfragen automatisch mit exponentiellem Backoff und optionalem Jitter. Wiederholungen sind standardmäßig deaktiviert, das Verhalten bleibt also unverändert, sofern Enabled nicht auf true gesetzt wird. Eine Anfrage wird wiederholt, wenn der Antwort-Statuscode in StatusCodes enthalten ist oder ein vorübergehender Netzwerkfehler auftritt (Verbindung geschlossen, Socket-Fehler, Verbindungs- oder Lese-Timeout).
Enabled: aktiviert die automatische Wiederholung fehlgeschlagener Anfragen. Standardmäßig false.
MaxRetries: maximale Anzahl von Wiederholungen nach der ursprünglichen Anfrage. Standardmäßig 3.
InitialInterval: Verzögerung in Millisekunden vor der ersten Wiederholung. Standardmäßig 500.
MaxInterval: maximale Verzögerung in Millisekunden zwischen Wiederholungen. Standardmäßig 30000.
Multiplier: Faktor, der nach jedem Versuch auf die Verzögerung angewendet wird. Standardmäßig 2.0, wodurch sich die Verzögerung bei jeder Wiederholung verdoppelt: 500, 1000, 2000...
Jitter: Zufallsfaktor zwischen 0 und 1, der auf jede Verzögerung angewendet wird (0.2 variiert jede Verzögerung um bis zu 20%), wodurch vermieden wird, dass viele Clients genau zur gleichen Zeit wiederholen. Standardmäßig 0.2.
HonorRetryAfter: wenn der Server mit einem Retry-After-Header antwortet (als Sekunden oder als HTTP-Datum, üblicherweise bei einer 429- oder 503-Antwort), wartet der Client die vom Server angeforderte Zeit anstelle der berechneten Backoff-Verzögerung. Standardmäßig true.
StatusCodes: durch Kommas getrennte Liste von HTTP-Statuscodes, die eine Wiederholung auslösen. Standardmäßig "429,502,503,504".
Beispiel: bis zu 5 Wiederholungen, beginnend mit 1 Sekunde zwischen den Versuchen.
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.RetryOptions.Enabled := True;
oHTTP.RetryOptions.MaxRetries := 5;
oHTTP.RetryOptions.InitialInterval := 1000;
ShowMessage(oHTTP.Get('https://www.esegece.com'));
Die KI-Provider-Clients (OpenAI, Anthropic, Gemini und die anderen LLM-API-Clients) verwenden dieselbe Wiederholungs-Engine über die RetryOptions-Eigenschaft ihrer Options.
Standardmäßig verwendet der HTTP1Client blockierende Anfragen, sodass der Client nach dem Aufruf einer HTTP-Anfragemethode auf die Antwort vom Server wartet. Alternativ können Sie asynchrone Methoden verwenden, um diese HTTP-Anfragen in einem sekundären Thread auszuführen, wodurch das Blockieren des Threads, in dem die Anfrage aufgerufen wird, vermieden wird. Die folgenden asynchronen Methoden sind implementiert:
Nach dem Aufruf dieser Methoden fährt der Code, anstatt auf die Antwort zu warten, mit der nächsten Zeile fort, und die Antwort kann mit dem Ereignis OnAsyncResponse behandelt werden.
procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);
Wenn beim Verarbeiten der asynchronen Anforderung ein Fehler auftritt, wird die Ausnahme im Ereignis OnAsyncException ausgelöst.
In Delphi 2010 und höher implementiert der Client außerdem asynchrone Anfragen im Future-Stil, die keinen Event-Handler benötigen:
function GetFuture(const AURL: string): IsgcFuture<string>;
function PostFuture(const AURL: string; aData: TStream): IsgcFuture<string>;
Die Anfrage läuft in einem Hintergrundthread und das zurückgegebene Future löst sich zum Antwort-Body auf: Rufen Sie Await auf, um zu blockieren, bis die Antwort eintrifft, ThenProc, um sie in einer Continuation zu verarbeiten, und OnError, um Fehler zu behandeln. Der Aufruf von Cancel bricht die zugrunde liegende HTTP-Anfrage ab, statt sie bis zum Ende laufen zu lassen.
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.GetFuture('https://www.esegece.com')
.ThenProc(procedure(const aBody: string)
begin
Log(aBody);
end)
.OnError(procedure(E: Exception)
begin
Log(E.Message);
end);
Fordern Sie eine GET-Methode an einen HTTPs-Server an und verwenden Sie TLS 1.2
oHTTP := TsgcHTTP1Client.Create(nil);
Try
oHTTP.TLSOptions.Version := tls1_2;
ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
oHTTP.Free;
End;
Fordert eine GET-Methode an einen HTTPS-Server unter Verwendung von openSSL 1.1 und TLS 1.3 an
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;
Fordern Sie eine asynchrone POST-Methode an und lesen Sie die Antwort mit dem 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);
Fordert eine GET-Methode an einen HTTPS-Server an, unter Verwendung von SChannel für 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;
Fordern Sie die SSE-Methode an, um Datenereignisse zu erhalten
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;
OnSSEMessage
Das Ereignis wird aufgerufen, wenn eine neue SSE-Nachricht empfangen wird.
OnSSLVerifyPeer
Wenn die Zertifikatsprüfung aktiviert ist, können Sie in diesem Ereignis überprüfen und entscheiden, ob das Server-Zertifikat akzeptiert werden soll.
OnSSLGetHandler
Dieses Ereignis wird ausgelöst, bevor der SSL-Handler erstellt wird. Sie können hier Ihren eigenen SSL-Handler erstellen (er muss von TIdServerIOHandlerSSLBase oder TIdIOHandlerSSLBase erben) und die erforderlichen Eigenschaften festlegen.
OnSSLAfterCreateHandler
Wenn kein benutzerdefiniertes SSL-Objekt erstellt wurde, wird mit dem OpenSSL-Handler ein Standardobjekt erstellt. Sie können auf die Eigenschaften des SSL-Handlers zugreifen und sie bei Bedarf ändern.
OnAsyncResult
Das Ereignis wird nach dem Anfordern einer Async-Methode (mit GetAsync-, PutAsync-... Methoden) aufgerufen. Verwenden Sie den Parameter Response, um das Ergebnis der Anfrage zu erfahren.
OnAsyncException
Wenn beim Verarbeiten einer asynchronen Anfrage ein Fehler auftritt, wird dieses Ereignis mit der ausgelösten Ausnahme aufgerufen.