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
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 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
Bbommel

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

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

  Alt 23. Okt 2019, 08:48
Okay, dass du auf diese WebHook-Dinger keinen Zugriff hast, ist schon klar, aber bisher ging ich von deiner Beschreibung davon aus, dass du zumindest ordnungsgemäß formatierte HTTP-Anfragen erwarten kannst (immerhin steht im Titel deines Beitrags etwas von "REST Server" und POST-Commands). Wenn das der Fall ist, dann wird die WebBroker-Anwednung dir weiterhelfen können (wie gesagt: dein selbst gebastelter Test-Client hat eine nicht standardkonforme Anfrage gesendet).

Wenn du wirklich "alles und jedes" abfangen willst, dann bist du tatsächlich eher bei den TCP-Sockets&Co. richtig. Dann ist aber deine bisherige Anforderungsbeschreibung mit HTTP und POST nicht ganz passend. In dem Fall wäre vielleicht auch ein neues Thema hier in der DP gut, wenn du gezielt fragen willst, ob/wie du das dann mit IPv6 hinbekommen kannst.

Ach so, weil du noch Port 80 erwähnt hast: in meinem Screenshot war Port 8090 zu sehen, weil ich den Testserver dort laufen lassen musste, weil Port 80 hier schon belegt ist. Natürlich kannst du mit dem WebBroker auch Port 80 benutzen.
  Mit Zitat antworten Zitat
Rolf Frei

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

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

  Alt 23. Okt 2019, 16:47
Was Bbommel geschrieben hat ist richtig. Du sendest vom Client aus die Daten mit einem falschen ContentType. Mach was er geschrieben hat. Die externen Webhooks senden dir die Daten dann schon so wie sie im HTTP Protokoll sein müssen. Das HTTP-Protokoll gibt genau vor wie die Daten formatiert sein müssen. Wenn du aber irgendwelche Webhooks hast, die garnicht HTTP verweden sondern was anderes auf TCP Socket Ebene, dann nützt dir ein Websserver eh nichts. Der versteht nur HTTP. Datasnap kannst du auf jeden Fall vergessen. Für deine Anforderung ist das nicht das richtige Framework.

Geändert von Rolf Frei (23. Okt 2019 um 17:00 Uhr)
  Mit Zitat antworten Zitat
Alt 11. Feb 2025, 12:33     Erstellt von alex112
Dieser Beitrag wurde von TBx gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort


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 06:10 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