TsgcHTTP3Client › Ereignisse › OnResponse

OnResponse Ereignis

Wird ausgelöst, wenn eine vollständige HTTP/3-Antwort empfangen wurde.

Syntax

TsgcHTTP3ResponseEvent = procedure(Sender: TObject;

  const aResponse: TsgcHTTP3Response) of object;



property OnResponse: TsgcHTTP3ResponseEvent read FOnResponse write FOnResponse;

Parameter

NameTypBeschreibung
SenderTObjectDie TsgcHTTP3Client-Instanz, die das Ereignis ausgelöst hat.
aResponseconst TsgcHTTP3ResponseDie 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.

Hinweise

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.

Beispiel



procedure TfrmMain.OnResponseEvent(Sender: TObject;

  const aResponse: TsgcHTTP3Response);

begin

  if aResponse.StatusCode = 200 then

    Log(aResponse.GetDataAsString)

  else

    Log('HTTP %d', [aResponse.StatusCode]);

end;

Zurück zu Ereignissen