Christin K.: POST-Daten manuell senden

Hallo ihr :-)

Ich habe hier ein kleines Test-Script, das nur anzeigt, ob Daten über POST eingegangen sind:

http://87.106.49.169/post.php

Nun möchte ich mittels PHP manuell die POST-Daten senden und habe dazu folgendes Script:

<?
function PostToHost($host, $path, $data_to_send) {
  $fp = fsockopen($host, 80);
  printf("Open!\n");
  fputs($fp, "POST ".$path." HTTP/1.1\r\n");
  fputs($fp, "Host: ".$host."\r\n");
  fputs($fp, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11");
  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");
  fputs($fp, "Connection: close\r\n\r\n");
  fputs($fp, $data_to_send);
  printf("Sent!\n");
  while(!feof($fp)) {
      $res .= fgets($fp, 128);
  }
  printf("Done!\n");
  fclose($fp);

return $res;
}

$x = PostToHost("87.106.49.169","/post.php","http://87.106.49.169/post.php","login=feld1&passwort=feld2");
echo $x;
?>

Es funktioniert nur leider nicht. Ich habs auch mal über telnet probiert, die Befehle einzeln abzuarbeiten... war genauso wenig erfolgreich.

Hab ich etwas übersehen?

Gruß
Christin

  1. Lieber Christin,

    Du brauchst noch einen Delimiter, um die Header-Daten von den Inhaltsdaten zu trennen.

    Wie das geht bekomme ich jetzt aber auch nicht aus dem Ärmel geschüttelt. Ich hatte jedoch hier im Forum auch einmal das Problem. Es ging um das einbinden eines Bilderuploads, der von einem Server auf den anderen durchgeführt werden sollte (Webcam-Bild aktualisieren).

    Habe gerade den Archiv-Thread von damals gefunden!

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

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

      Du brauchst noch einen Delimiter, um die Header-Daten von den Inhaltsdaten zu trennen.

      Denn hat er schon: zwei Zeilenumbrüche beenden den Header.

      Servus

  2. Hi Christin,

    $x = PostToHost("87.106.49.169","/post.php","http://87.106.49.169/post.php","login=feld1&passwort=feld2");

    Du rufst PostToHost() mit 4 Parametern auf, aber…

    function PostToHost($host, $path, $data_to_send) { /* […] */ }

    …die Funktion erwartet nur 3 Parameter.

    Viele Grüße,
      ~ Dennis.

  3. (Hallo|Hi(ho)|Tag) Christin K.,

    Ich habe hier ein kleines Test-Script, das nur anzeigt, ob Daten über POST eingegangen sind:

    http://87.106.49.169/post.php

    Ruft man die URL auf, gibts eine 404-Not-Found-Meldung. Ist das etwa schon der Fehler? ;-)

    Nun möchte ich mittels PHP manuell die POST-Daten senden und habe dazu folgendes Script:

    ... aus den PHP-FAQ kopiert und dann umgebaut?

    function PostToHost($host, $path, $data_to_send) {
      $fp = fsockopen($host, 80);
      printf("Open!\n");
      fputs($fp, "POST ".$path." HTTP/1.1\r\n");
      fputs($fp, "Host: ".$host."\r\n");
      fputs($fp, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11");
      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");
      fputs($fp, "Connection: close\r\n\r\n");
      fputs($fp, $data_to_send);
      printf("Sent!\n");
      while(!feof($fp)) {
          $res .= fgets($fp, 128);
      }
      printf("Done!\n");
      fclose($fp);

    »»

    return $res;
    }

    Ich sehe im Quelltext keinerlei if-Statements (nur ein while), was für mich heißt, dass niemals abgefragt wird, ob die aufgerufenen Funktionen Fehler melden. Wenn du dein error_reporting() auf E_ALL gestellt hast, müsstest du aber sehen, ob was schief gegangen ist. Trotzdem ist es sinnvoll, den Rückgabewert von fsockopen() abzufragen. Das Gleiche gilt für fputs(), auch das kann fehlschlagen. Den Referrer solltest ganz weglassen, oder wenigstens der Variablen $referer einen Wert geben.

    $x = PostToHost("87.106.49.169","/post.php","http://87.106.49.169/post.php","login=feld1&passwort=feld2");

    Es funktioniert nur leider nicht.

    Und was hast du so beobachtet? Welche Fehlermeldungen hast du gesehen?
    Wie hat das Script auf der Serverseite geantwortet?

    Das PHP-Handbuch hat zu fsockopen() einige Tipps parat (auch in den Benutzerkommentaren).

    MffG
    EisFuX