Einzelnen Beitrag anzeigen

ScharfeMietze

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

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

  Alt 23. Okt 2019, 00:03
Dein Problem ist dein Client, nicht der Server. Du gibst einen Text im JSON-Format an, setzt aber in deinem Client keinen Content-Type. Daher setzt der Client dann automatisch einen Content-Type, und zwar auf "x-www-form-url-encoded", was ziemlich spezfisch ist. Hier gibt es dann leider doch einen kleinen Automatismus auch im einfachen Web-Broker, weil der halt merkt, dass der Content so überhaupt nicht zum angegebenen Content-Type passt. Das heißt: in deinem Client musst du für den Request den Content-Type anpassen, damit du testen kannst - auf application/json oder auf text/plain (wie das beim TNetHTTPClient geht, hab ich noch nicht getestet, weil noch nicht gebraucht bisher).

Wie hier schon mal von jemand anderem geschrieben: es ist einfacher, wenn du für den Tests des Servers das Tool "Postman" nimmst, welches genau für so etwas da ist. Im Anhang ein Screenshot, bei dem du dann siehst, dass dann, wenn der Content-Type nicht komplett was anderes sagt als der Content, auch eine sinnvolle Antwort vom Server zurückkommt. Schau dir das Tool mal an - damit kannst du schnell und einfach "rumspielen" und deinen Server testen.
Ich habe ja keinen Zugriff auf die Webhook Server "Clienten"

Daher muss der Server damit umgehen können.

als Beispiel
Delphi-Quellcode:
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.Win.ScktComp;

type
  TfTVServer = class(TForm)
    srvrsckt1: TServerSocket;
    mmo1: TMemo;
    procedure srvrsckt1Accept(Sender: TObject; Socket: TCustomWinSocket);
    procedure srvrsckt1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  private
    procedure mmoAdd(Value:string);
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  fTVServer: TfTVServer;

implementation

{$R *.dfm}

procedure TfTVServer.mmoAdd(Value: string);
begin
mmo1.Lines.Add(TimeToStr(now) + ' Server : "' + Value + '"');
end;

procedure TfTVServer.srvrsckt1Accept(Sender: TObject; Socket: TCustomWinSocket);
begin
mmoAdd('Remotehost :' + Socket.RemoteHost);
mmoAdd('Remoteadress : ' +Socket.RemoteAddress);

end;

procedure TfTVServer.srvrsckt1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
mmoAdd('ReciveText : ' + Socket.ReceiveText);
end;
Das funktioniert. nur leider nicht mit ipv6

Die Ausgabe ist folgende
Delphi-Quellcode:
00:43:32 Server : "Remotehost :ec2-34-212-75-30.us-west-2.compute.amazonaws.com"
00:43:32 Server : "Remoteadress : 34.212.75.30"
00:43:32 Server : "ReciveText : POST / HTTP/1.1
Host: alpt.kxmwm3epa9wmpje7.myfritz.net
User-Agent: Go-http-client/1.1
Content-Length: 74
Content-Type: text/plain; charset=utf-8
Accept-Encoding: gzip

100.0 Kleiner als RSI PPO Divergence (55, 12, 26, 9, 2, 14) auf BTCUSD, 1D"
Da die WebhookServer oft auf den Port 80 bestehen brauche ich einen Server der alle und alles empfängt.
  Mit Zitat antworten Zitat