Einzelnen Beitrag anzeigen

ScharfeMietze

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

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

  Alt 22. Okt 2019, 18:55


Okay, mein Ansatz wäre folgender:

Starte ein neues Projekt in Delphi: Datei->Neu->Weitere->WebBroker->Web Server Anwendung.
In dem folgenden Assistenten kannst du auch wählen, ob du das Ding als eigenständigen Server haben willst oder als IIS-Anhängsel. Für den Start am einfachsten: ein eigenständiger Server ("GUI-Einzelanwendung"). Dann kannst du auch noch im Assistenten auswählen, ob er dir HTTPS vorbereiten soll. IPv6 hat bei mir noch nie Probleme gemacht.

So, dann bekommst du von Delphi zwei Units erzeugt. Eine ist die GUI, mit der du den Server starten und stoppen kannst. Das andere ist das WebModul, mit dem du die eigentlichen Aktionen durchführen kannst, also die Antworten generieren kannst, die du an einen Client senden willst. Da funken dir dann (fast) keine Automatismen mehr dazwischen und du kannst genau kontrollieren, was hier passiert.

Bei dir ist es ja sehr einfach, weil du eigentlich nur eine Aktion brauchst, nämlich die Default-Aktion und die ist sogar schon da. Wechsel also im WebModul in die Code-Ansicht, dort findest du dann:



Dss war es auch schon. Nur das "SaveDataToFile" gibt es hier nicht, ist sozusagen eine Platzhalter für deine dann noch zu bastelnde Methode, damit du die Daten auch speichern kannst. Achtung: das müsstest du ggf. mit kritischen Abschnitten sichern, wenn du alle Daten in die selbe Datei schreibst, weil ja sonst zwei Threads zugleich in die Datei schreiben wollen.
Tya wass soll ich sagen, ich habe damit genau das gleiche Problem, das die Daten nicht ankommen.

der Server
Delphi-Quellcode:
procedure TWebModule2.WebModule2webhookAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  LsList: TStringList;
begin
if Request.MethodType=mtPost then
  begin
  LsList := TStringlist.Create;
    try
    LsList.Text:= Request.Content;
    LsList.SaveToFile('C:\Test\Test.txt');
    finally
      LsList.Free;
    end; // try
    fResponse.mmo1.Lines.Add(Request.Content);
    Response.Content:='Heureka! Data Saved = ' + Request.Content;
    Response.ContentType:='text/plain';
  end
else
  begin
    Response.Content:='ich antworte nur auf POST!';
    Response.ContentType:='text/plain';
  end;
  Response.StatusCode:=200;
  Handled:=true;
end;
und die Client

Delphi-Quellcode:
procedure TfClient.btn3Click(Sender: TObject);
const
  Url = 'https://alpt.kxmwm3epa9wmpje7.myfritz.net/webhook';
var
  LsList: TStringList;
  LsStream: TStringStream;
begin
LsList := TStringlist.Create;
  try
  LsStream := TStringStream.Create;
    try
      LsList.Add('{"Hastaaaaa":"Lavista Baby "}');
      nthtprqst1.Post(Url,LsList,LsStream, TEncoding.Default) ;
      mmo1.Lines.Add(LsStream.DataString);
    finally
      LsStream.Free;
    end; // try
  finally
    LsList.Free;
  end; // try
end;
Der Derver gibt zurück
Heureka! Data Saved =
  Mit Zitat antworten Zitat