RobRobson: vom Socket kommt ungeparste Antwort zurück

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

  1. 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

    1. 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

      1. 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

        1. 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

          1. 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

            1. Moin hotti,

              muss heißen: Content-Length

              (Bcuhstbaenverdrheung)

              m(

              Vielen Dank und beste Grüße,
              Rob

      2. 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

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. 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

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. 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