Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Einfacher Webserver... Wo finde ich das übergebene JSON (https://www.delphipraxis.net/214184-einfacher-webserver-wo-finde-ich-das-uebergebene-json.html)

Supergr 30. Nov 2023 10:59

Einfacher Webserver... Wo finde ich das übergebene JSON
 
Hallo Zusammen,

ich muss für eine relativ einfache Kommunikation mit einen Webserver bauen.
Ein Externer Server schickt mir per POST ein JSON.
Der Event kommt und ich bekomme in der IdHTTPServer1CommandGet soweit alles- außer:
das JSON was mir mitgeschickt wurde ist unauffindbar...

Code:
procedure TAct.IdHTTPServer1CommandGet(AContext: TIdContext;  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
   Stream : TStream;
   S : string;

begin
If ARequestInfo.CommandType = hcPOST then
  begin
    Stream := ARequestInfo.PostStream;
    if Assigned(Stream) then
    begin
      Stream.Position := 0;
      S := ReadStringFromStream(Stream);

               TThread.Synchronize(nil,
                 procedure
                 begin
                    memo1.Lines.Add(S);
                 end);
    end
  end;
end;

procedure TAct.IdHTTPServer1CreatePostStream(AContext: TIdContext; AHeaders: TIdHeaderList; var VPostStream: TStream);
begin
  VPostStream := TMemoryStream.Create;
end;

procedure TAct.IdHTTPServer1DoneWithPostStream(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; var VCanFree: Boolean);
begin
 VCanFree := false;
end;
So der Code den ich gefunden habe. Leider ist S immer leer! Hat jemand einen Tip wo ich die Daten finden kann?
Der PostStream scheint nicht leer zu sein, zumindest ist er immer zugewiesen.

Vielen Dank!

Delphi 11 / Indy 10

Der schöne Günther 30. Nov 2023 11:23

AW: Einfacher Webserver... Wo finde ich das übergebene JSON
 
Doch, genau so machen wir das auch.

Du hast doch einen Debugger. Steht im
Delphi-Quellcode:
PostStream
wirklich nichts drin? Was macht diese ominöse
Delphi-Quellcode:
ReadStringFromStream(..)
?

Ich nehme einfach einen
Delphi-Quellcode:
System.Classes.TStreamReader
, sage
Delphi-Quellcode:
ReadToEnd()
und habe meinen String, der dann halt noch in ein Json-Objekt umgewandelt werden muss...

PS: Im RAD Studio gibt es unter Tools -> REST-Debugger ein Standalone-Tool zum Testen. Das ist zwar nicht ganz das Gelbe vom Ei, aber echt schon mal besser als nichts.

Supergr 30. Nov 2023 11:47

AW: Einfacher Webserver... Wo finde ich das übergebene JSON
 
Hallo "Der schöne Günther" :-D

Perfekt. Du hast mich auf den korrekten Weg gebracht.
Die Funktion hatte ich im Web im Zusammenhang mit Webserver und Daten gefunden. Vielleicht was Altes.

Mit dem StreamReader klappts wunderbar Danke schön!

paule32.jk 12. Dez 2023 07:40

AW: Einfacher Webserver... Wo finde ich das übergebene JSON
 
Hallo,

prinzipell besteht ein WebServer Request und Response aus zwei Teilen:
- einen Header (in dem Daten "über" das Objekt stehen - zum Beispiel auch die größe des Bodies(Streams)
- und einen Body (in dem dann die Daten "des" Objektes stehen - getrennt von \r\n)

der Body wiederum kann sich in mehrere Teile teilen, wenn Du zum Beispiel plain/raw Daten mit enkodierten Daten sendest oder empfängst.
Das ist dann abhängig/gekennzeichnet durch den im Header stehenden Mime-Typ.

Der Mime-Typ ist sowas wie eine Beschreibung des Inhalts, was die Response enthält.
Zum Beispiel: html/text oder: json/text.

Für eine genaue Erklärung empfehle ich Dir die RFC (Request For Call) zu den jeweiligen Protokoll zu den Server-Typ (hier HTML Protokoll) unter Benutzung von google zu suchen.

Mit freundlichen Grüßen
Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz