AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi rest server wie muss das post Command aussehen oder welchen Server könnte ich verwend
Thema durchsuchen
Ansicht
Themen-Optionen

rest server wie muss das post Command aussehen oder welchen Server könnte ich verwend

Ein Thema von ScharfeMietze · begonnen am 19. Okt 2019 · letzter Beitrag vom 23. Okt 2019
Antwort Antwort
Seite 1 von 2  1 2      
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#1

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

  Alt 22. Okt 2019, 12:48
Ich frage mich, ob du da nicht Probleme hast, weil du da Datasnap verwendest. Brauchst du das überhaupt? Soweit ich dein Problem verstehe, brauchst du keine DataSnap Funktionalität dafür, das macht es dir nur viel komplizierter oder eventuell sogar unmöglich, das zu machen was du eigentlich willst. DataSnap ist ein Delphi framework, das hierzu glaube ich fehl am Platz ist.

Mach doch eine ganz normales Webmodul (nicht DSWebModul) und handle dann alles so wie du es haben willst. Im Moment greifft dir da DS zu stark dazwischen. DS ist nciht dafür gemacht, was du da machen willst.
Beim Rest Server bin ich gelandet weil der Rest auch immer irgendwo haperte. Bei nachinstallierten Komponenten wurde ipv6 nicht unterstüzt. Bei Indy ist das ssl gerne mal ein Problem mit dem IdHTTPServer konnte ich mir die die daten ausgeben lassen,scheitert bisher aber bei der Homeserver Https url... usw... Und der Restserver lief auf Anhieb klaglos
Wenn es irgendwo ein schönes Examlpe gibt für einen Server der das Geforderte kann bin ich jederzeit offen für neues..
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
793 Beiträge
 
#2

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

  Alt 22. Okt 2019, 13:02
Versuch mal folgendes:

Die WebhookAction nimmst du wieder raus.
Die Funktion TServerMethods1.Webhook ebenfalls raus.

und dann sowas in der Art:

function TServerMethods1.updateWebhook(Value: TJSONObject): TJSONObject;
begin
Result := Value;
fConnect.Memo1.Lines.Add('Webhook update' + Value.ToJSON);
end;

Und das ganze dann mit ..../Webhook/ und einem JSON-Text im Body als "Post" posten.
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
251 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 22. Okt 2019, 13:59
Noch Detaillierter:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.Net.URLClient,
  System.Net.HttpClient, System.Net.HttpClientComponent;

type
  TForm1 = class(TForm)
    Button1: TButton;
    NetHTTPClient1: TNetHTTPClient;
    procedure Button1Click(Sender: TObject);
  private
    sErr: string;
    slParams: TStringList;
    slHeaders: TStringList;
    Function doGetData(sBody, BodyMode, url: String; var sRP: String): Boolean;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  sBody: string;
  url: string;
  sRP: string;
  bodyMode: string;
begin
  slParams:= TStringList.Create;
  slHeaders:= TStringList.Create;
  try
    sBody := '{"Hasta":"Lavista Baby "}';
    bodyMode := 'raw';
    url:= 'deine Ziel URL';
    if doGetData(sBody,bodyMode,url,sRP) then
      showmessage(sRP);
  finally
    slParams.Free;
    slHeaders.Free;
  end;
end;

function TForm1.doGetData(sBody, BodyMode, url: String; var sRP: String): Boolean;
var
  uri: TUri;
  srRQBody: TStringStream;
  RP: IHTTPResponse;
  sRQContent: String;
  sRPContent: String;
  srRPBody: TStringStream;
  I: Integer;
  StatusCode: Integer;
  StatusText: String;
  ResponseText: String;
begin
  Result := false;
  srRQBody:= TStringStream.Create;
  srRPBody:= TStringStream.Create;
  try
    //-- URL
    try
      uri := TUri.Create(URL);
    except on E: Exception do
      sErr:= E.Message;
    end;

    //-- Params
    for I := 0 to slParams.Count-1 do
      uri.AddParameter(slParams.Names[i], slParams.ValueFromIndex[i]);

    //-- Auth
      //SetAuth(RQRec);

    //-- Headers
    for I := 0 to slHeaders.Count-1 do
      NetHTTPClient1.CustomHeaders[slHeaders.Names[i]] := slHeaders.ValueFromIndex[i];

    //-- Body
    sRQContent := sBody;
    if BodyMode='rawthen
    begin
      srRQBody.WriteString(sRQContent);
      srRQBody.Position := 0;
    end else
    if BodyMode='x-www-form-urlencodedthen
    begin
      sRQContent := 'data'+'='+sRQContent;
      srRQBody.WriteString(sRQContent);
      srRQBody.Position := 0;
    end;


    RP := NetHTTPClient1.Post(uri.ToString, srRQBody, srRPBody);
    sRPContent := srRPBody.DataString;
    StatusCode := RP.StatusCode;
    StatusText := RP.StatusText;
    ResponseText := sRPContent;
    if StatusCode=200 then
      Result := true;
  finally
    srRQBody.Free;
    srRPBody.Free;
  end;
end;

end.
  Mit Zitat antworten Zitat
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#4

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

  Alt 22. Okt 2019, 16:06
Noch Detaillierter:
Ich bin dran. Beim ersten versuch hat es den Server zum absturz gebracht. Beim 2 Versuch scheint der Server Den Inhalt zu bekommen aber die Showmessage bleibt leer. Ich bin aber dran. Vielen Dank für deine Mühe. Wobei die Clientseite nur zum testen des Servers da sein sollte. An sich muss der Server einfach viel annehmen, da ich in der Regel keinen Zugriff auf den Server Habe der die Hooks sendet.

Update es funktioniert....
Am server ist das Lesbar.

16:55:12 {"Hasta":"Lavista Baby "} Vielen Dank!! Damit bin ich nun schon weiter... nun muss ich nur sehen ob ich den Server so Flexibel bekomme das er möglichst viel akzeptiert. Wenn du da noch ein Tipp für mich hast wäre das super.
  Mit Zitat antworten Zitat
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#5

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

  Alt 22. Okt 2019, 14:46
Versuch mal folgendes:

Die WebhookAction nimmst du wieder raus.
Die Funktion TServerMethods1.Webhook ebenfalls raus.

und dann sowas in der Art:

function TServerMethods1.updateWebhook(Value: TJSONObject): TJSONObject;
begin
Result := Value;
fConnect.Memo1.Lines.Add('Webhook update' + Value.ToJSON);
end;

Und das ganze dann mit ..../Webhook/ und einem JSON-Text im Body als "Post" posten.

Im Server sieht es nun so aus

Delphi-Quellcode:
function TServerMethods1.updateWebhook(Value: TJSONObject): TJSONObject;
begin
  Result := Value;
  fConnect.Memo1.Lines.Add('Webhook update' + Value.ToJSON);
end;

function TServerMethods1.Webhook(Value: TJSONObject): TJSONObject;
begin
  Result := Value;
   fConnect.Memo1.Lines.Add('Webhook ' + Value.ToJSON);
end;

Gesendet habe ich es so


Delphi-Quellcode:
procedure TfClient.btn1Click(Sender: TObject);
const
  Url = 'https://alpt.kxmwm3epa9wmpje7.myfritz.net/datasnap/rest/TServerMethods1/Webhook/';
// Url = 'https://alpt.kxmwm3epa9wmpje7.myfritz.net/datasnap/rest/TServerMethods1/Webhook/data/';
//POST /datasnap/rest/TServerMethods1/%22updateEchoAttribute%22/Attr1
var
  LsList: TStringList;
  LsStream: TStringStream;
begin
nthtpclnt1.ContentType:= 'application/x-www-form-urlencoded';
LsList := TStringlist.Create;
  try
  LsStream := TStringStream.Create;
    try
      LsList.Add('{"webhook":"John"}');
      nthtprqst1.Post(Url,LsList,LsStream, TEncoding.Default) ;
      mmo1.Lines.Add(UTF8Decode(LsStream.DataString));
    finally
      LsStream.Free;
    end; // try
  finally
    LsList.Free;
  end; // try
end;


Retour bekomme ich

{"error":"Ung\u00FCltige Typumwandlung"}
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
793 Beiträge
 
#6

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

  Alt 22. Okt 2019, 14:58
Was passiert bei ContentType application/json ?
  Mit Zitat antworten Zitat
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#7

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

  Alt 22. Okt 2019, 15:15
Was passiert bei ContentType application/json ?
das gleiche
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
793 Beiträge
 
#8

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

  Alt 22. Okt 2019, 15:18
Hast du mal den Server im Debugger laufen lassen?
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
656 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 22. Okt 2019, 14:06
Ich frage mich, ob du da nicht Probleme hast, weil du da Datasnap verwendest. Brauchst du das überhaupt? Soweit ich dein Problem verstehe, brauchst du keine DataSnap Funktionalität dafür, das macht es dir nur viel komplizierter oder eventuell sogar unmöglich, das zu machen was du eigentlich willst. DataSnap ist ein Delphi framework, das hierzu glaube ich fehl am Platz ist.

Mach doch eine ganz normales Webmodul (nicht DSWebModul) und handle dann alles so wie du es haben willst. Im Moment greifft dir da DS zu stark dazwischen. DS ist nciht dafür gemacht, was du da machen willst.
Beim Rest Server bin ich gelandet weil der Rest auch immer irgendwo haperte. Bei nachinstallierten Komponenten wurde ipv6 nicht unterstüzt. Bei Indy ist das ssl gerne mal ein Problem mit dem IdHTTPServer konnte ich mir die die daten ausgeben lassen,scheitert bisher aber bei der Homeserver Https url... usw... Und der Restserver lief auf Anhieb klaglos
Wenn es irgendwo ein schönes Examlpe gibt für einen Server der das Geforderte kann bin ich jederzeit offen für neues..
Hast du meinen letzten nachträglich hinzugefügten Zusatz auch gelesen:

Kannst du eventuell nochmals genauer beschreiben, was du genau machen willst. Ist mir noch nicht so recht klar wie da der Ablauf sein soll. Da ist noch eine 3. Instanz im Spiel (ausser deinem Client und deinem Webserver), die deine Webadresse aufruft und du willst da aus den übergebenen Daten etwas machen (Z.B. Speichern in einer DB)? Ist das so richtig oder was fehlt da noch? Wenn das so ist, schmeiss den ganzen DS Teil wieder raus und verarbeite die Webabfrage im Webmodul so wie du sie benötigst. Du machst dir das mit dieser simplen Aufgabe mit dem DS Ansatz viel zu schwer.

Was hat es mit deinem geposteten Telegramm Code zu tun? Wozu brauchst du neben dem Webserver noch einen Client? Nur zum Testen?

Geändert von Rolf Frei (22. Okt 2019 um 14:22 Uhr)
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
672 Beiträge
 
Delphi 12 Athens
 
#10

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

  Alt 22. Okt 2019, 14:16
Ich möchte mich Rolf da mal anschließen. Ich dachte, ich könnte vielleicht helfen, weil ich in letzter Zeit auch relativ viel Web-Zeug gemacht habe, aber ich verstehe nicht mal, was eigentlich die Frage bzw. das Problem ist. In deinem ersten Beitrag hatte ich es so verstanden, dass du einen Client schreiben willst, aber dass der nicht funktioniert. Mittlerweile verstehe ich es so, dass du aber eigentlich den Server schreiben willst.

Beitrag #31 klang für mich so, als ob es darum geht, dass du einen Server schreiben willst, der einfach ALLE Anfragen an ihn, die ein Post sind, abfängt und irgendwo speichert. Dort sollen diese "Rohdaten" dann später analysiert werden. Ist das korrekt?

Falls ja, kann ich mich Rolf nur einmal mehr anschließen: schmeiß diesen DataSnap-Zeug weg. Mit einer einfachen WebBroker-Anwendung ist das schnell und einfach gemacht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz