Tom: Nachtrag zum Form-Post (Post2Host)

Beitrag lesen

Hello,

Noch ein Nachtrag:

einigermaßen erklärt wird es hier:
http://www.php-faq.de/q/q-code-post.html

<?php  #### post2host.php ####

function post2host($host, $path, $referer, $data_to_send, $port=80)

{

$fp = fsockopen($host, $port);
    fputs($fp, "POST $path HTTP/1.1\r\n");
    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\r\n");

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

fclose($fp);

return $res;
}

Header müssen mit CRLF aabgeschlossen werden. PHP nutzt aber kein magisches "\n", sondern ein rein ersetzendes. Es muss also dediziert "\r\n" angegeben werden.

Außerdem sollte man bei größeren Datenmengen noch beachten, ob man nicht "chunked" übertragen muss, also mit Zeilenumbrüchen. Es fehlt auch ein Content transfer encoding.

Wenn man sich einen Requestheader anschauen will, hilft z.B. php://input als Kanal zum Auslesen.

http://forum.de.selfhtml.org/archiv/2006/10/t139327/#m904985
http://www.php.net/manual/en/wrappers.php.php

Bau Dir also ein Formular, fülle es aus mit Umlauten etc, und sende es dann an Deinen Testserver. Dann kannst Du es ansehen. Achte auf das Encoding der Daten.

Auch dafür ist der Head-Request ggf. gut, um herauszufinden, welche Codierung der Server haben will.

Wäre schön, wenn wir das hier mal fertig diskutieren könnten, wie so ein Request vollständig und sauber aufgebaut werden sollte.

Ein harzliches Glückauf

Tom vom Berg

http://bergpost.annerschbarrich.de
.

--
Nur selber lernen macht schlau