TsgcHTTP3Client › Ereignisse › OnResponse
Wird ausgelöst, wenn eine vollständige HTTP/3-Antwort empfangen wurde.
TsgcHTTP3ResponseEvent = procedure(Sender: TObject;
const aResponse: TsgcHTTP3Response) of object;
property OnResponse: TsgcHTTP3ResponseEvent read FOnResponse write FOnResponse;
| Name | Typ | Beschreibung |
|---|---|---|
Sender | TObject | Die TsgcHTTP3Client-Instanz, die das Ereignis ausgelöst hat. |
aResponse | const TsgcHTTP3Response | Die Antwort. StatusCode ist der HTTP-Status, Headers sind die Antwort-Header, Data die rohen Body-Bytes, ContentType und ContentLength die entsprechenden Header-Werte. Rufen Sie GetDataAsString auf, um den Body als Text zu decodieren. |
OnResponse wird ausgelöst, sobald die vollständige Antwort eingetroffen ist, also die Header und der komplette Body. Es ist der wichtigste Weg, um die Antwort einer asynchronen Anfrage wie GetAsync zu lesen, denn diese Methoden kehren sofort zurück und geben nichts zurück.
Das Ereignis wird auch für synchrone Verben ausgelöst, die den Body zusätzlich direkt zurückgeben, sowie nach einem erfolgreichen ExtendedConnect, damit die Handshake-Antwort geprüft werden kann. Es wird nicht für gepushte Antworten ausgelöst, die über OnPush zugestellt werden, und auch nicht für getunnelte Bytes, die über OnTunnelData zugestellt werden.
Das Antwortobjekt gehört dem Client und ist nur innerhalb des Handlers gültig, kopieren Sie daher alles, was Sie behalten möchten.
Dekodieren Sie den Body mit GetDataAsString, das den Zeichensatz im content-type-Header berücksichtigt und auf UTF-8 zurückfällt.
Das Ereignis wird auf dem Thread ausgelöst, der die Anfrage ausgeführt hat. Bei einem synchronen Verb ist das der Thread, der den Aufruf getätigt hat, bei einem asynchronen Verb der von der Async-Methode erzeugte Hintergrund-Worker-Thread. Synchronisieren Sie, bevor Sie aus dem Handler auf VCL- oder FMX-Steuerelemente zugreifen.
procedure TfrmMain.OnResponseEvent(Sender: TObject;
const aResponse: TsgcHTTP3Response);
begin
if aResponse.StatusCode = 200 then
Log(aResponse.GetDataAsString)
else
Log('HTTP %d', [aResponse.StatusCode]);
end;