POST per PHP verschicken
zettelbox
- php
Hallo Leute,
ich versuche, eine PHP-Datei über eine Socketverbindung aufzurufen und ihr POST-Daten zu übermitteln. Ersteres funktioniert gut, nur die POST-Daten kommen nicht an.
Folgendermaßen gehe ich vor:
// generate headers in array.
$t = array();
$t[] = 'POST ' . $uri . ' HTTP/1.1';
$t[] = 'Content-Type: text/html';
$t[] = 'Host: ' . $ip . ':' . $port;
$t[] = 'Content-Length: ' . strlen($content);
$t[] = 'Connection: close';
$t = implode("\r\n",$t) . "\r\n\r\n" . $content . "\r\n";
$fp = fsockopen($ip,$port,$errno,$errstr,10);
fwrite($fp,$t)
Anschließend hole ich mir die Antwort, was auch tadellos funktioniert und nicht mehr Bestandteil meines Problems ist (glaub ich zumindest...)
Die Variablen sind natürlich korrekt ausgefüllt, da bin ich mir recht sicher, abgesehen von der $content. $fp enthält "Resource id #2", also wohl da auch keine schlechte Nachricht vom Webserver. Wenn ich jetzt einen POST-Request übermitteln möchte, kann ich dann einfach schreiben (in der Variablendefinition weiter oben): $content = "field1='inhalt1'"; ?
Die Datei, die per Socketverbindung geöffnet wird, sieht übrigens folgendermaßen aus:
<?php
echo "Dies ist der Inhalt des POST-Feldes field1: ".$_POST['field1'];
?>
Ausgabe ist:
Dies ist der Inhalt des POST-Feldes field1:
print_r($_SERVER) in der angeforderten Datei gibt folgendes:
[REQUEST_METHOD] => POST
[QUERY_STRING] =>
Es sieht also so aus, als würde alles funktionieren, nur die POST-Daten nicht ankommen. Könnte das auch ein Problem mit der Serverkonfiguration sein? Ich sehe nämlich sonst echt keinen Ansatzpunkt mehr...
Vielen vielen Dank im Voraus,
Franz
Hi,
$t[] = 'Content-Type: text/html';
Was soll denn dieser Content-Type?
Wenn ich jetzt einen POST-Request übermitteln möchte, kann ich dann einfach schreiben (in der Variablendefinition weiter oben): $content = "field1='inhalt1'"; ?
Wenn field1 die Hochkommata ebenfalls enthalten soll, ja.
MfG ChrisB
Hey Chris,
$t[] = 'Content-Type: text/html';
Was soll denn dieser Content-Type?
Das ist eigentlich eine wirklich gute Frage. Wäre Content-Type: application/x-www-form-urlencoded sinnvoller?
Wenn ich jetzt einen POST-Request übermitteln möchte, kann ich dann einfach schreiben (in der Variablendefinition weiter oben): $content = "field1='inhalt1'"; ?
Wenn field1 die Hochkommata ebenfalls enthalten soll, ja.
Okay, auch das ein guter Hinweis.
Leider besteht mein Problem trotz des o.g. Content-Types weiterhin. :(
Dennoch vielen Dank für Deine Hilfe. Hast Du eventuell noch eine Idee?
Gruß
Franz
Hi,
Leider besteht mein Problem trotz des o.g. Content-Types weiterhin. :(
Dennoch vielen Dank für Deine Hilfe. Hast Du eventuell noch eine Idee?
Ich kann im Moment keine grossen Unterschiede zum Beispielvorgehen in http://php-faq.de/q-code-post.html erkennen.
MfG ChrisB
Hey Chris,
oh mein Gott, ich hab das Problem gefunden!
Ich bin aber auch wirklich ein Depp.
Und zwar hattest Du das Problem im vorherigen Post tatsächlich gelöst. Es lag am Content-Type und der von mir als zweite Alternative gepostete war dann auch korrekt. Aber ich Held hab ihn dann per C&P in den Code eingefügt - MIT \r\n. Durch das explode() weiter unten entstand daraus dann ein \r\n\r\n, was dem Webserver das Ende des Headers vermittelte. Danach kam für diesen dann natürlich nur noch Murks.
Chris, tausend Dank. You really made my day :) (Und ich werde gleich zur Selbstbestrafung übergehen...)
Lieben Gruß
Franz
Hi,
Das ist eigentlich eine wirklich gute Frage. Wäre Content-Type: application/x-www-form-urlencoded sinnvoller?
Leider besteht mein Problem trotz des o.g. Content-Types weiterhin. :(
Hast Du die Daten denn auch urlencoded?
cu,
Andreas
Moin!
http://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html
Da hat jemand die Lösung Deines Problems sehr schön beschrieben. Er benutzt allerdings die PHP-Erweiterung curl.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Mahlzeit!
Ja, auf die Variante bin ich auch schon gestoßen. Wenn ich hier nicht weiter komme, nützt mir ja alles nix. Aber ich möchte eigentlich eher wissen, warum es per Socket nicht klappt. Das wurmt mich total!
Übrigens liegt es tatsächlich auf keinen Fall am Empfang der Daten, sondern am Senden der POST-Daten. Auch wenn ich Daten an externe Seiten sende (falsch; besser: senden WILL!), kommt da nichts an :(
Frustrierte Grüße (und natürlich trotzdem Danke!)
Franz