Antwort auf einen POST-Request verarbeiten
Sebastian H.
- php
Hallo,
also ich möchte die antwort auf einen POST-Request (z.b. http://www.test.de/?usr=xyz&pw=xxx&jahr=02&liste=4) in ein Array zeilenweise einlesen. Mit einem angepassten Skript http://www.dclp-faq.de/q-code-post.html ist es mir leider nicht.
Bei der Antwort des Servers handelt sich es um reinen Text im CSV Format.
Also nochmal Zusammengefasst. Ich möchte eine PHP-Datei aufrufen, die dann einen POST Request an einen Server ausführt, und die Daten die sie von diesem Server bekommt einliest, zerlegt und schön in einer Tabelles darstellt.
Das einzige was ich nicht verstehe ist wie ich die Daten in mein PHP-Skript kriege, damit ich sie verarbeiten und ausgeben kann.
Vielen Dank und schöne Grüße,
Sebastian
also ich möchte die antwort auf einen POST-Request (z.b. http://www.test.de/?usr=xyz&pw=xxx&jahr=02&liste=4) in ein Array zeilenweise einlesen. Mit einem angepassten Skript http://www.dclp-faq.de/q-code-post.html ist es mir leider nicht.
Das einzige was ich nicht verstehe ist wie ich die Daten in mein PHP-Skript kriege, damit ich sie verarbeiten und ausgeben kann.
Du solltest Dich erstmal mit dem HTTP-Protokoll beschäftigen, bevor Du es benutzt; zumindest das grundlegende Prinzip sollte Dir bekannt sein. Die Doku zu HTTP 1.1 findest Du zum Beispiel unter http://www.w3.org/Protocols/rfc2616/rfc2616.html.
Ein grober Überblick:
HTTP-Anfragen und -Antworten bestehen aus zwei Teilen, den Kopfzeilen und darauf folgendend den eigentlichen Daten.
Die erste Zeile ist immer entweder ein Befehl (bei einer Anfrage, zum Beispiel "GET" oder "POST") oder der Antwortcode ("HTTP/1.0 200 OK"), dann kommen Null oder mehr Zeilen mit Infos, jeweils bestehend aus einem Namen, einem Doppelpunkt und den Daten ("Content-Type: text/html") und abschließend eine Leerzeile.
Damit ist der Kopf beendet. Sofern nötig folgen die Daten, die zu dieser Anfrage oder Antwort gehören (zum Beispiel eine HTML-Datei).
Wie Du in dem Skript oben sicherlich gesehen hast, kann man diese Kommunikation sehr einfach (meistens) über Dateisystemfunktionen abwickeln.
Das Skript öffnet mit
$fp = fsockopen($host,80);
eine Verbindung zur Gegenstelle, Port 80 (da warten Webserver normalerweise). Anschließend wird einfach mit
fputs($fp, "POST $path HTTP/1.1\n");
der Befehl POST abgeschickt, mit
fputs($fp, "Host: $host\n");
und den folgenden Zeilen weitere Infos hinterhergeschoben, wobei bei
fputs($fp, "Connection: close\n\n");
zu beachten ist, daß hier eine Leerzeile gesendet wird (zur Trennung von Kopf und Daten), und last but not least werden die Daten gesendet:
fputs($fp, "$data_to_send\n");
Anschließend wird sogar noch die Antwort in $res eingelesen und zurückgegeben. Fertig.
Blöderweise wird da HTTP/1.1 verwendet, das erschwert das Auslesen der Antwortdaten möglicherweise etwas. Ersetze "POST $path HTTP/1.1" durch "POST $path HTTP/1.0".
Weiterhin werden in dem Skript die Zeilen fälschlicherweise nicht mit CRLF abgeschlossen, wie im Protokoll gefordert, sondern nur mit einem LF. Ersetze alle "\n" durch "\r\n".
Zu guter Letzt ist das "\n" in der Zeile mit dem $data_to_send falsch. Nimm es raus und füge stattdessen den Befehl "flush();" hinter dieses letzte fputs() ein, um alle Daten zu senden.
So. Und wo ist jetzt Dein Problem mit der Verarbeitung von $res?
Gruß,
soenk.e