EisFuX: POST-Daten manuell senden

Beitrag lesen

(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