Dengue: POST mit PHP

Hi,
da ich leider nicht die Möglichkeit habe, Formulare zum Abschicken von POSTs zu nutzen, müsste ich dies direkt mit PHP machen. Ich habe mehrfach durch verschiedene Foren zu dieser Seite gefunden: http://www.php-faq.de/q/q-code-post.html
Ich habe das Script so ausgeführt und es funzt. Wenn ich es aber anpassen möchte, gibt es Probleme, weil ich auch ganz einfach nicht verstehe, wie die Daten gesendet werden. Außerdem weiß ich halt nicht, wie die Daten auf der Empfängerseite ankommen. Normalerweise ist $_POST ja ein assoziatives Array, von dem ich in diesem Fall nicht den index kenne.

Jetzt meine Frage: Kennt jemand eine einfache Methode zum Versenden von POSTs und auch zum Empfangen?

PS: GET kann ich nicht verwenden, da der String, den ich versenden will, zu groß wäre.

Danke

MfG
Dengue

  1. Hi.

    function PostToHost($host, $path, $referer, $data_to_send) { //Funktion; du kannst sie doch aufrufen, oder?  
      $fp = fsockopen($host, 80); //in Host wurde der Zielhost definiert. 80 ist der Port, der bei Webseiten ja eigentlich Standard ist.  
      printf("Open!\n");  
      fputs($fp, "POST $path HTTP/1.1\r\n"); //$path ist der Zielpfad auf dem Host, also das Script oder so, was die $_POST Daten empfangen soll  
      fputs($fp, "Host: $host\r\n");  
      fputs($fp, "Referer: $referer\r\n");  
      fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");  
      fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n"); //Länge deines Posts  
      fputs($fp, "Connection: close\r\n\r\n");  
      fputs($fp, $data_to_send); //Dein Post  
      printf("Sent!\n");  
      while(!feof($fp)) {  
          $res .= fgets($fp, 128);  
      }  
      printf("Done!\n");  
      fclose($fp);  
      
      return $res;  
    }
    

    Es werden ganz einfach ein paar Daten an den Zielhost an das angegebene Script übergeben. Gibt es eine bestimmte Stelle, die du nicht verstehst?

    Gruß
    Christian Wansart

    1. Grüße,

      hoffe ich darf da mal einklincken :)

      while(!feof($fp)) {
            $res .= fgets($fp, 128);
        }

      was speichert $res denn? die daten die per POST gesendet wurden?
      ich verstehe die funktionsweise des zeigers nciht ganz >_<

      wo steht er denn nach dem "schreiben in den zielscript"?

      MFG
      bleicher

      --
      __________________________-
      Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
      http://www.sexgott-or-not.com/?test=428054
      1. hoffe ich darf da mal einklincken :)

        Dann klink ich mich auch mal ein.

        while(!feof($fp)) {
              $res .= fgets($fp, 128);
          }

        was speichert $res denn? die daten die per POST gesendet wurden?

        Nein, in $res steht danach die Rückgabe des Servers.

        ich verstehe die funktionsweise des zeigers nciht ganz >_<

        $fp ist kein Zeiger auf eine klassische Datei sondern eine Art Schnittstelle zwischen Client und Server. Man kann dort also nur sequentiell lesen und schreiben. Der andere muss dann entsprechend die Daten in Empfang nehmen oder antworten.

        Das obige Skript sendet also erst eine http-Anfrage und empfängt dann die Antwort des Servers.

        Christian.

        1. danke ;)

          MFG
          bleicher

          --
          __________________________-
          Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
          http://www.sexgott-or-not.com/?test=428054
    2. Erstmal danke für die Kommentierung des Scriptes.
      Welche Variable für was steht wusste ich, bis auf die Variable $referer. Nachdem ich mal etwas darüber gelesen habe, ist das die URL von der ich den POST ausführe. Allerdings war in dem Beispiel-Script (siehe Link) die URL vom Empfänger angegeben. Das ist irgendwie verwirrend.

      Weiterhin ist halt auch mein Problem, wie ich die übertragenen Daten wieder im Empfängerscript nutzen kann.

      MfG
      Dengue

      1. Lieber Dengue,

        Weiterhin ist halt auch mein Problem, wie ich die übertragenen Daten wieder im Empfängerscript nutzen kann.

        Du hast doch selbst geschrieben, dass $_POST ein assoziatives Array ist. Dann mach Dir doch seine Eigenschaft zunutze, indem Du mit folgender Schleife alle gePOSTeten Daten abfragst:

        function durchforstePostDaten() {  
            $ausgabe = "gesendete Daten:\r\n\r\n";  
          
            foreach($_POST as $index => $value) {  
                $ausgabe .= "'$index': "; // ehemaliges "name"-Attribut im Formular  
                $ausgabe .= "'$value'"; // der gesendete Wert für dieses "name"-Attribut  
                $ausgabe .= "\r\n";  
            }  
          
            return $ausgabe;  
        }  
          
        echo $durchforstePostDaten();
        

        Mir ist klar, dass das auch noch einfacher mit print_r($_POST); geht, jedoch wollte ich im obigen Beispiel zeigen, wie man die Indices des Arrays in eine Variable übernehmen kann, um dann damit etwas zu tun (daher ist die foreach-Schleife auch so umständlich).

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)