Der Martin: posttohost, wieso klappt das nicht?

Beitrag lesen

Hallo,

Ich hab, den ganzen Code in den Papierkorb geworfen und komplett neu geschrieben.

das ist manchmal das beste, was man tun kann.

function PostToHost($host, $path, $referer, $data_to_send) {
  $fp = fsockopen($host, 80, $errno, $errstr, 30);
  var_dump($fp);
  printf $errstr;

if(!$fp){
    // hier kommt später die Fehlermeldung hin

und genau dort ist auch erst die Ausgabe von $errstr sinnvoll.

} else {
    fputs($fp, "POST $path HTTP/1.1\r\n");

Du übergibst einen leeren String als $path. Das gibt's aber in HTTP nicht; es entsteht also immer noch ein fehlerhafter Request-Header.

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");
    fputs($fp, "Connection: close\r\n\r\n");
    fputs($fp, $data_to_send);

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

Hier sammelst du Responsedaten in $res, hast aber versäumt, $res vorher zu initialisieren.

fclose($fp);

return $res;
  }
}

$host = "www.google.de"
$path = "";
$data = "i=irgendwas&p=nochmalwas";

$x =  PostToHost($host, $pfad, "irgendeineRefferer.de", $data);

echo $x;

jetzt meldet $fp resource(20) of type (stream)

Das ist schon mal was - die Verbindung mit der Gegenstelle hat also geklappt.

Wenn ich den host und den path auf meine realen Daten setze, kommt das selbe
aber $x ist immer noch leer.

Das überrascht mich - zumindest die Response-Header würde ich erwarten. Hier wegen des Fehlers mit $path wohl am ehesten ein "400 Bad Request". Dass gar nichts kommt, finde ich eigenartig.

So long,
 Martin

--
Zwei Kumpels sitzen vor dem Computer. "Welche Suchmaschine beutzt du eigentlich meistens?" - "Prima Vera." - "Hmm, kenn' ich gar nicht." Dann geht die Tür auf: "Schatz ich habe deine Sonnenbrille wiedergefunden!" - "Prima, Vera!"
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(