HTTP Telegramme

kev27

Cadet 2nd Year
Registriert
März 2012
Beiträge
16
Hallo zusammen,

bin mir nicht sicher ob das Forum für mein Problem die richtige Adresse ist, aber einen Versuch ist es Wert:


ich muss einen Zugriff auf einen Webserver mit einer SPS automatisieren.

Es geht darum Parameter eines Steuergerätes zu ändern was sonst eigentlich nur über die Web Oberfläche möglich ist.

Ich habe mir zunächst mit Wireshark angeschaut was passiert wenn ich die Parameter über den Browser ändere. Das entsprechende HTTP Telegramm habe ich dann in eine Textdatei gepackt und wollte es mit Hyperterminal an den Webserver schicken.

Allerdings hat das nicht funktioniert - wenn ich mir die Kommunikation in Wireshark anschaue sehe ich, dass die Telegramme anscheinend fragmentiert wurden - anstatt einem großen wurden ca 5 Kleine versendet.

Wireshark deklariert die auch nicht als HTTP sondern als TCP/IP!?


Nun meine Frage(n):

Wie ist denn ein HTTP Telegramm definiert? Im Endeffekt wird doch alles über TCP/IP übertragen, oder nicht? Gibt es dann irgendwo eine "Kennung" die besagt dass es sich um ein HTTP Telegramm handelt? ich stecke in dem ganzen Netzwerk Thema nicht so tief drin, evtl finde ich hier eine grundsätzliche Erklärung - gerne auch hilfreiche Links oder Literatur Vorschläge.

Kennt ihr eine gute Freeware mit der ich TCP oder direkt HTTP Telegramme versenden kann um weiter zu testen?

Kann es wirklich sein dass edr Webserver mit der Fragmentierung nicht klar kommt oder habe ich noch einen grundsätzlchen Fehler in meiner Vorgehensweise?

Danke.

Grüße
 
Für HTTP-Debugging kann ich dir http://www.telerik.com/fiddler empfehlen.

Das was du als Fragmente bezeichnest, werden einfache TCP-Pakete sein. HTTP nutzt man aber i.d.R. als ein fortlaufender Stream - wahrscheinlich ist es bei dir genauso.
 
HTTP ist rein Text einer bestimmten Art die an und von Port 80/TCP gesendet wird. Dabei ist Port 80 eine reine Konvention, d.h. der Webserver kann auch an beliebigen anderen Ports lauschen.

Hyperterminal ist das falsche Programm. Nutze z.B. telnet. Womit schreibst du deine Programme?

Code:
 telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
GET /index.html HTTP/1.1
host: meesa.ydns.eu

HTTP/1.1 200 OK
Date: Wed, 12 Oct 2016 19:29:20 GMT
Server: Apache/2.4.10 (Debian)
Last-Modified: Wed, 13 May 2015 04:40:23 GMT
ETag: "0-515ef35435243"
Accept-Ranges: bytes
Content-Length: 0
Content-Type: text/html

Connection closed by foreign host.

Telnet auf Port 80 und dann ein der Befehl:
GET /index.html HTTP/1.1
host: meesa.ydns.eu


Linefeed nach dem Hostnamen beachten (enter drücken). Die Seite ist leer, Content length: 0 aber es ist normales http.
Wenn du einfach nur "get /" eingibst z.B. kommt ne Fehlermeldung, formatiert in HTML.
 
Ich würde für soetwas das Kommandozeilentool curl verwenden (gibts auch für Windows). Firefox kann dir sogar im Entwicklermodus einen HTTP-Request als curl Kommandozeile zu exportieren (Tab Network, dann entsprechend einen Request auswählen und mit rechts "Copy as Curl").

Aber wie schon genannt wurde ist HTTP nichts weiter als ein über TCP/IP übertragener Text, bestehend aus HTTP Header und Content. Beim Header ist wichtig, dass die Linefeeds das Windows-übliche CR LF (Carriage-Return, Line-Feed) aufweisen müssen! Nach dem Header kommt eine Leerzeile und dann der Content.
 
bin eben nochmal über das Thema gestolpert.

Es hat mit keinem eurer Software Vorschläge funktioniert - vom Webserver kam immer die Rückmeldung 501 -> HTTP Befehl nicht verstanden... ALLE Tools haben die Anfrage in mehreren Telegrammen abgesendet!

Aber: von der SPS aus hat es funktioniert, wer hätte das gedacht :)

Die SPS verschickt die Daten auch in einem Telegramm - zumindest bis zu einer gewissen Größe (ob das wirklich der Grund war kann ich nicht sagen)
 
Zurück
Oben