Delphi-PRAXiS
Seite 2 von 6     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi rest server wie muss das post Command aussehen oder welchen Server könnte ich verwend (https://www.delphipraxis.net/202320-rest-server-wie-muss-das-post-command-aussehen-oder-welchen-server-koennte-ich-verwend.html)

Aviator 20. Okt 2019 11:04

AW: rest server wie muss das post command aussehen
 
Hast du denn mal versucht, einen POST Request per cURL an den Server zu senden? Nicht das dein Delphi Code evtl. nur einen Fehler hat. Oder per PowerShell mit Invoke-WebRequest? Du könntest auch PostMan dafür verwenden, aber cURL sollte in dem Fall zum Testen bereits ausreichen.

ScharfeMietze 20. Okt 2019 11:43

AW: rest server wie muss das post command aussehen
 
Mein Problem ist das ich normal nicht viel mit Servern zu tun habe. Ich rate mit der Syntax nur rum. Leider finde ich trotz tagelanger suche nicht wirklich was brauchbares. Ein Beispiel für einen einfachen Server in dem Postdata empfangen und verarbeitet werden würden mir schon reichen. Ich dachte das wäre auch mit einem Restserver einfach zu lösen... zumal es ja über einfache Browserzeile funktioniert.

Aviator 20. Okt 2019 11:45

AW: rest server wie muss das post command aussehen
 
Ein Browser sendet bei einer Eingabe in die Adresszeile aber immer nur ein GET Request. Ist denn überhaupt sichergestellt, dass dein Server POST Requests akzeptiert?

ScharfeMietze 20. Okt 2019 12:50

AW: rest server wie muss das post command aussehen
 
Genau das ist ja die Frage. Wie muss ich den Server einstellen, damit er post empfängt und wie verarbeite ich diese. Ich dachte das ein Server der mit get umgehen kann auch post Daten verarbeiten kann. Falls nein Was muss ich am Server tun damit er Post Daten empfangen kann?

als beispiel von Telegramm
The short version
You'll need a server that:

Supports IPv4, IPv6 is currently not supported for Webhooks.
Accepts incoming POSTs from subnets 149.154.160.0/20 and 91.108.4.0/22 on port 443, 80, 88, or 8443.

und eine Post message von Telegramm sähe so aus.

Delphi-Quellcode:
curl --tlsv1 -v -k -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
"update_id":10000,
"message":{
  "date":1441645532,
  "chat":{
     "last_name":"Test Lastname",
     "id":1111111,
     "first_name":"Test",
     "username":"Test"
  },
  "message_id":1365,
  "from":{
     "last_name":"Test Lastname",
     "id":1111111,
     "first_name":"Test",
     "username":"Test"
  },
  "text":"/start"
}
}' "https://YOUR.BOT.URL:YOURPORT/"

Wie muss ich welchen Server aufsetzen damit ich diese Daten empfangen und lesen kann.

Olli73 21. Okt 2019 11:13

AW: rest server wie muss das post command aussehen
 
Zitat:

Zitat von ScharfeMietze (Beitrag 1449975)
Wie muss ich welchen Server aufsetzen damit ich diese Daten empfangen und lesen kann.

Dein Server-Projekt sollte ein Webmodule beinhalten und dieses hat die Eigenschaft "Actions". Dort musst du eine "POST-Action" hinzufügen und den Code dafür schreiben (der Inhalt des Posts steht in Request.Content).

Deine "ReverseString-Action" mit der du testest ist wohl als "GET-Action" deklariert.

ScharfeMietze 21. Okt 2019 12:15

AW: rest server wie muss das post command aussehen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Olli73 (Beitrag 1450010)
Dein Server-Projekt sollte ein Webmodule beinhalten und dieses hat die Eigenschaft "Actions". Dort musst du eine "POST-Action" hinzufügen und den Code dafür schreiben (der Inhalt des Posts steht in Request.Content).

Deine "ReverseString-Action" mit der du testest ist wohl als "GET-Action" deklariert.

Okay gefunden habe ich es und habe es hinzugefügt. Stimmt der ansatz so wie im bild?

Gibt es irgendwo Beispiele in die ich mich einlesen kann um den Code zu schreiben? Weil Google gibt nicht wirklich was dazu her *seuftz*
Aber dickes DANKE! Da bin ich schon mal einen kleinen Schritt weiter

Olli73 21. Okt 2019 12:51

AW: rest server wie muss das post Command aussehen oder welchen Server könnte ich ver
 
Bei MethodType würde ich noch mtPost angeben, ansonsten sieht es schon mal gut aus.

Im onAction kannst du sowas machen:
Delphi-Quellcode:
var
  S: String;
begin
  S := Request.Content;
  S := 'Empfangen: ' + S; // Daten verarbeiten
  Response.Content := S;
end;
Aufrufen musst du das ganze dann mit ".../webhook".

ScharfeMietze 21. Okt 2019 14:38

AW: rest server wie muss das post Command aussehen oder welchen Server könnte ich ver
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Olli73 (Beitrag 1450015)
Bei MethodType würde ich noch mtPost angeben, ansonsten sieht es schon mal gut aus.

Aufrufen musst du das ganze dann mit ".../webhook".

Ich bin zwar weiter aber nicht am Ziel
auf der Clientseite sieht es so aus
Delphi-Quellcode:
procedure TfClient.btn1Click(Sender: TObject);
const
  Url = 'https://alpt.kxmwm3epa9wmpje7.myfritz.net/datasnap/rest/TServerMethods1/Webhook';
var
  LsList: TStringList;
  LsStream: TStringStream;
begin
LsList := TStringlist.Create;
  try
  LsStream := TStringStream.Create;
    try
      LsList.Add('abc=Test Client');
      nthtprqst1.Post(Url,LsList,LsStream) ;
      mmo1.Lines.Add(UTF8Decode(LsStream.DataString));
    finally
      LsStream.Free;
    end; // try
  finally
    LsList.Free;
  end; // try

end;
und ich erhalte folgende Meldung {"error":"Methode TServerMethods1.updateWebhook in der Servermethodenliste nicht gefunden"}
vorher bekam ich {"error":"Methode TServerMethods1.Webhook in der Servermethodenliste nicht gefunden"}
darauf wurde
Delphi-Quellcode:
type
  TServerMethods1 = class(TDSServerModule)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    function EchoString(Value: string): string;
    function ReverseString(Value: string): string;
    function Webhook(Value: string): string;
  end;

function TServerMethods1.Webhook(Value: string): string;
begin
  Result := Value;
  fConnect.Memo1.Lines.Add('Webhook ' + Result);
end;
hinzugefügt.

Die
Delphi-Quellcode:
procedure TWebModule1.WebModule1WebhookAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  S: String;
begin
  S := Request.Content;
  S := 'Empfangen: ' + S; // Daten verarbeiten
  fWebhook.mmo('TWebModule1.WebModule1Webhook : ' +  Request.Content );
  Response.Content := S;
end;
ist wie von @Olli73 angegeben über onAction bearbeitet. siehe Bild


Was mich wundert ist
ich sende an
Delphi-Quellcode:
https://alpt.kxmwm3epa9wmpje7.myfritz.net/datasnap/rest/TServerMethods1/Webhook
"webhook"
und
ich erhalte einen Fehler weil
Delphi-Quellcode:
{"error":"Methode TServerMethods1.updateWebhook in der Servermethodenliste nicht gefunden"}
"updatewebhook fehlt.
Ich google nun schon eine weile weil ich nicht weiß was in die function rein muss die er haben möchte. bin aber noch nicht fündig geworden. Wenn Olli73 oder andere noch Tipps hätten wäre das kurz vor dem Ziel super..

ScharfeMietze 21. Okt 2019 14:47

AW: rest server wie muss das post Command aussehen oder welchen Server könnte ich ver
 
kleines update
von mir wurde nun in ServerMethods1

Delphi-Quellcode:
function TServerMethods1.updateWebhook(Value: string): string;
begin
  Result := Value;
  fConnect.Memo1.Lines.Add('Webhook ' + Result);
end;
die function eingebaut. neue fehlermeldung ist nun von der Clientseite

Delphi-Quellcode:
{"error":"Nachrichteninhalt ist kein g\u00FCltiger JSON-Wert."}

ScharfeMietze 21. Okt 2019 14:59

AW: rest server wie muss das post Command aussehen oder welchen Server könnte ich ver
 
update...

auf der Clentseite habe ich nun Json eingefügt.
Delphi-Quellcode:
procedure TfClient.btn1Click(Sender: TObject);
const
  Url = 'https://alpt.kxmwm3epa9wmpje7.myfritz.net/datasnap/rest/TServerMethods1/Webhook';
var
  LsList: TStringList;
  LsStream: TStringStream;
begin
LsList := TStringlist.Create;
  try
  LsStream := TStringStream.Create;
    try
      LsList.Add('{"Hasta":"Lavista Baby "}');
      nthtprqst1.Post(Url,LsList,LsStream) ;
      mmo1.Lines.Add(UTF8Decode(LsStream.DataString));
    finally
      LsStream.Free;
    end; // try
  finally
    LsList.Free;
  end; // try

end;


als Result bekomme ich nun auf der Clientseite


Delphi-Quellcode:
{"result":[""]}

und auf dem server bleibt das Json "verschollen".
wenn wenn mir nun noch jemand helfen könnte das im Nirvana verschollene Json zu finden, wäre das super...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr.
Seite 2 von 6     12 34     Letzte »    

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