HTTP Kommunikation - TF6310 | TwinCAT 3 TCP/IP

R_TRIG

Level-1
Beiträge
21
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte über mein TwinCAT einen HTTP Request (Port 80) an einen Remote Server absetzen.
Dafür verwende ich die TCP/IP Bibliothek TF6310. Der Verbindungsaufbau über FB_ClientServerConnection zum Server funktioniert.

Folgendes HTTP Kommando möchte ich nun an den Server schicken:

Schicke ich den o.g. Befehl über Chrome erhalte ich eine passende Antwort. Im Wireshark-Trace sehe ich, dass er es auch als HTTP Protokoll gesendet hat. Siehe Screenshot OK

Sende ich dieses Kommando über den FB_SocketSend zum Server, so wird es nicht in HTTP "übersetzt". In Wireshark sehe ich, dass er an Port 80 sendet, aber das Payload sieht komplett anders aus. Siehe Screenshot NOK

Laut Beschreibung setzt sich der Befehl wie folgt zusammen:

This section shows an example, how a HTTP request is transmitted without using a web-browser. Lets assume,
that the following HTTP request shall be send:

http://<IP address>/cmd/get_protocol_info

This request is translated into a simple string (using HTTP/1.1 in this example):
GET /cmd/get_protocol_info HTTP/1.1\r\n\r\n

This string is send as payload data of a TCP/IP packet to the server. The server responds back a TCP/IP packet with
the HTTP reply as payload data.



Jemand eine Idee woran es liegt?

Danke und Gruß
R_TRIG
 

Anhänge

  • OK.jpg
    OK.jpg
    161,6 KB · Aufrufe: 18
  • NOK.jpg
    NOK.jpg
    116,8 KB · Aufrufe: 18
Zuviel Werbung?
-> Hier kostenlos registrieren
Mist... ich hatte gehofft, dass ich die TF6760 nicht benutzen muss. Habe die TF6760 auch schon ausprobiert, aber da hat mir der FB_IotHttpClient irgendwie nie bConnected = TRUE angezeigt...
Muss ich mich wohl nochmal tiefergehend mit beschäftigen. Das Beckhoff-Hilfe Beispiel: PostmanEcho - Get; sollte genau das abdecken, was ich versuchen möchte nehme ich an?
 
Naja, das wird ja vielleicht auch mit der TF6310 gehen, nur musst Du dann auch genau wissen, was Du schicken musst. Bei dem was Du unter NOK geschickt hast fehlt ja die Hälfte, was aus der Wireshark Aufzeichnung auch hervorgeht. Es reicht ja nicht, dass Du nur den HTTP-Befehl schickst, es muss ja auch alles mitgeschickt werden, was beispielsweise Chrome oder ein anderer Browser automatisch hinzugefügt hat.
 
Zuletzt bearbeitet:
Hallo
Hatte kürzlich eine ähnliche Aufgabe. Habe es auch mit der TF6310 gelöst. Im meinem Fall habe ich für das Senden des Kommandos den Teilstring vom Http und der IP-Adresse weggelassen.
Konkret sah mein Sendestring folgendermaßen aus. (Nachdem GET ist noch ein Leerschlag drin.)

VAR CONSTANT:
sCOMMAND_STATUS :STRING :='GET /TrojanControl/index.php/apiv1/system/status';
sCOMMAND_ENDING :STRING :='$R$N';
END_VAR

Code fürs Senden:

(*GetStatus String senden*)
stGetStatus.sSendString:=CONCAT(sCOMMAND_STATUS,sCOMMAND_ENDING);

stGetStatus.fbSocketSend(sSrvNetID:='', hSocket:=stGetStatus.hSocket,
cbLen:=INT_TO_UDINT(LEN(stGetStatus.sSendString)),
pSrc:=ADR(stGetStatus.sSendString),
bExecute:=TRUE,
tTimeout:=tSendTimeOut);

Voraussetzung ist natürlich, dass vorher der Verbindungsaufbau gemacht wurde und die richtige Socket-Adresse der Sende-Funktion übergeben wurde.
Ein nützliches Tool für solche Verbindungstest zu machen ist auch das Hercules Setup Tool. Siehe Link
https://www.hw-group.com/software/hercules-setup-utility
 
Zurück
Oben