vom Socket kommt ungeparste Antwort zurück
RobRobson
- https
Hallo Spezialisten,
ich hab hier ein Problem, ich musst emich heute mal mit dem Aufbauen einer Verbindung via fsockopen() (php5) beschäftigen. Und bekomme eine komische Antwort vom Server.
Also: auf meinem IntranetServer (Win2003, WAMP) liegt ein testscript:
test.php
<?php
print_r($_POST);
?>
Dieses versuche ich von meinem lokalen Server (WinXP, WAMP) aus mit einem script aufzurufen:
<?php
session_start();
## Verbindung zum Server herstellen ##
$host = "testserver";
$DataToSend = "test=xyz";
$fp = fsockopen($host, 80, $errno, $errstr); ##80 = Port, 10 = timeout
if(!$fp) $fehler = "<br> $errstr ($errno)";
else {
### Daten an den Server schicken
$request .= "POST /rob/test.php HTTP/1.1\r\n";
$request .= "HOST: $host\r\n";
$request .= "Referer: www.referer.de\r\n";
$request .= "Content-type: application/x-www-form-urlencoded\r\n";
$request .= "Content-lenght: ".strlen($DataToSend)."\r\n";
$request .= "Connection: close\r\n\r\n";
$request .= $DataToSend;
fwrite($fp,$request);
while(!feof($fp))
{
$res .= fgets($fp,128);
}
fclose($fp);
echo '<br><br>ANTWORT: '.$res;
}
?>
Erwarten würde ich nach dem Code das mein lokales Script einen Request an den Server sendet, die test.php zu laden, diese zu parsen (also das print_r() auszuführen) und dessen Antwort zurückzusenden.
Auf dem Bildschirm zu sehen ist aber:
ANTWORT: HTTP/1.1 200 OK [...Headerinfos] print_r($_POST) ?>
Also der Server hat die Datei nur ausgegeben aber nicht geparst. Wie kann sowas sein?
Viele Grüße,
Robert
Moin RobRobson,
Also der Server hat die Datei nur ausgegeben aber nicht geparst. Wie kann sowas sein?
Du hast deinen Webserver fehlerhaft konfiguriert. Du musst ihn Anweisen, für die Auslieferung von .php-Dateien PHP zu nutzen.
LG,
CK
Hi Christan,
Moin RobRobson,
Du hast deinen Webserver fehlerhaft konfiguriert. Du musst ihn Anweisen, für die Auslieferung von .php-Dateien PHP zu nutzen.
OK, die test.php wird jetzt schonmal geparst. (War noch ein falsches leerzeichen im code)
nun sit die Ausgabe des Scriptes aber nur: "Array()"
Sprich es sind keine POST-Daten angekommen.
Testweiste hab ich GET Daten an die URL angehangen, diese werden auch richtig vom testscript ausgegeben.
Warum aber klappts mit POST nicht?
Liegts ContentType?
beste Grüße,
Robert
hi,
Warum aber klappts mit POST nicht?
Liegts ContentType?
Du hast: application/x-www-form-urlencoded
Möchtest Du eine Datei schicken in einer Multipart-Message, muss der Content-Type so lauten:
multipart/form-data
Das sollte dann auch ordentlich geparst werden. Den Header Content-Length nicht vergessen.
Hotti
Hi Hotti,
multipart/form-data
Danke, aber ich muss keine Dateien verschicken, nur 2 Textfelder.
Laut: W3C reicht application/x-www-form-urlencoded dafür aus und ich habe es auch scheinbar richtig codiert.
Einzig der erste Satz verwirrt mich: "Control names and values are escaped". Ja, wodurch denn escaped?
Reicht es schon aus wie ich es gemacht habe, mit: $DataToSend = "test=xyz";? Oder muss da snoch irgendwie ander geschen? Die Netz-beispiele dazu sehen eigentlich nicht danach aus.
Viele Grüße,
Rob
hi,
öhhm, Du hast den Header
"Content-lenght:
muss heißen: Content-Length
(Bcuhstbaenverdrheung)
Laut: W3C reicht application/x-www-form-urlencoded dafür aus und
Ja, geht auch. Percent-Encoding nicht vergessen, falls notwendig:
text=M%C3%BCnchen
(utf8)
Hotti
Moin hotti,
muss heißen: Content-Length
(Bcuhstbaenverdrheung)
m(
Vielen Dank und beste Grüße,
Rob
Hello,
OK, die test.php wird jetzt schonmal geparst. (War noch ein falsches leerzeichen im code)
nun ist die Ausgabe des Scriptes aber nur: "Array()"
Sprich es sind keine POST-Daten angekommen.
Montier Dir das "HTTP-Live-Headers"-Add-On im Firefox und schau Dir an, wie der Browser solch einen Request aufbaut. Das ist immer ganz hilfreich, um es dann per PHP nachzubauen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello Robert,
$request .= "Content-lenght: ".strlen($DataToSend)."\r\n";
schai Dia doj dii obike Zaile nochmah an!
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Helo Tom,
$request .= "Content-lenght: ".strlen($DataToSend)."\r\n";
schai Dia doj dii obike Zaile nochmah an!
Das hab ich heute morgen schon getan, aber kapiert habe ich das auch erst jetzt ;)
Horst Leanglich