bleicher: POST Bad Requst ;(

Grüße,
ich habe mir erlaubt, aus den stücken der hier gegeben funktionen was zusammenzuschneiden:

(write() ist eine file_put_contents(), ausgelgagert, mehr nicht :P

  
function PostToHost($url , $path, $referer, $postsend) { //Funktion; du kannst sie doch aufrufen, oder?  
  
      $fp = fsockopen($url, 80); //in Host wurde der Zielhost definiert. 80 ist der Port, der bei Webseiten ja eigentlich Standard ist.  
      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: $url\r\n");  
      fputs($fp, "Referer: $referer\r\n");  
      fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");  
          $ausgabe="";  
            foreach($postsend as $index => $value) {  
          $ausgabe .= "'$index': "; // ehemaliges "name"-Attribut im Formular  
          $ausgabe .= "'$value'"; // der gesendete Wert fur dieses "name"-Attribut  
          $ausgabe .= "\r\n";  
         }  
      write($ausgabe, 'aus.txt');  
  
      fputs($fp, "Content-length: ". strlen($ausgabe) ."\r\n"); //Lange deines Posts  
      fputs($fp, "Connection: close\r\n\r\n");  
      fputs($fp, $ausgabe); //Dein Post  
  
       //while(!feof($fp)) {  
        //$res .= fgets($fp, 128);  
       //}  
      while(!feof($fp)) {  
       $res .= fgets($fp, 128);  
      }  
  
      write($res, 'res.txt');  
  
      fclose($fp);  
  
      //return $res;  
      }  

das wird als $ausgabe gesendet (aus.txt):

'test': 'user'
'wert': 'test'

und das gibt der server (res.txt) zurück:

HTTP/1.1 400 Bad Request
Date: Thu, 03 Jul 2008 23:02:49 GMT
Server: Apache
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>

werde aber selbst noch nicht auf anhieb aus den googelergebnissen dazu schlau >_<

wäre für ein hinweis zu meinem brett-vor-dem-kopf dankbar >:]

MFG
bleicher

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

    fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");

    Wie Daten (im allgemeinen Parametername=Value-Paare) in dieser Kodierung aussehen, ist dir bekannt?

    das wird als $ausgabe gesendet (aus.txt):

    'test': 'user'
    'wert': 'test'

    Noe, das sieht aber nicht wirklich nach form-urlencoded aus.

    MfG ChrisB

    --
    "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
  2. Hallo Bleicher,

    gerade war ich doch ziemlich beschäftigt, mir die RFCs anzusehen, auf denen das ganze fußt. Herausgekommen ist nicht wirklich viel, außer dass sich die Kodierung für den MIME-Type application/x-www-form-urlencoded nahe an die RFC 1738 anlehnt. Glücklicherweise gibt es aber eine Funktion in PHP, die das übernimmt.

            $ausgabe="";  
            foreach($postsend as $k=>$v){  
               $ausgabe.='&';  
               $ausgabe.=urlencode($k);  
               $ausgabe.='=';  
               $ausgabe.=urlencode($v);  
            }  
            $ausgabe=substr($ausgabe,1);
    

    Ich vermute nur, dass es daran nicht liegen wird.

    HTTP/1.1 400 Bad Request
    Date: Thu, 03 Jul 2008 23:02:49 GMT
    Server: Apache
    Content-Length: 226
    Connection: close
    Content-Type: text/html; charset=iso-8859-1

    Status Code 400 zeugt von Fehlern auf der Protokollebene (zu der der request-body bestehend aus den Postdaten eigentlich nicht gehört, jedoch kann es in Deinem Fall daran liegen, dass CRLF in Deinen Daten vorkommt). Da wäre dann interessant, was genau beim Server angeliefert wird.

    Gruß aus Berlin!
    eddi

    --
    Der Verweis auf die Grundlagen Deines Handelns, ist das Joch zur Freiheit.
    Aber so gilt: Allen Leuten Recht getan, ist keine Kunst, weil's jeder kann.
    1. Grüße,

      Status Code 400 zeugt von Fehlern auf der Protokollebene (zu der der request-body bestehend aus den Postdaten eigentlich nicht gehört, jedoch kann es in Deinem Fall daran liegen, dass CRLF in Deinen Daten vorkommt). Da wäre dann interessant, was genau beim Server angeliefert wird.

      hab urlencode versuch t- half nicht

      ist es überhaupt möglich die genau anfrage zu loggen?
      also das was den server bekommt "von siner sicht uas" zu sehen?

      MFG
      bleicher

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

        ist es überhaupt möglich die genau anfrage zu loggen?
        also das was den server bekommt "von siner sicht uas" zu sehen?

        Mir fputs() kannst du genauso in Dateien schreiben. Setze einfach $fp temporär auf ein File-Handle, dann kannst du schauen, was du dem Server schickst. Den Teil, in dem du Daten empfängst, solltest du solange auskommentieren.

        Gruß

        1. Grüße,
          na ja - ich habe es umgebaut - fputs() "drückt" es nun nich tzeile für zeile, sondern als ein längeres string rein.

          das ist dann der Log:

          Anfrage:

          POST /test.php HTTP/1.1
          Connection: close
          User-Agent: Mozilla/3.0 (Win95; I)
          Content-Type: application/x-www-form-urlencoded
          Content-Length: 18
          user=test&wert=bla

          Antwort:

          HTTP/1.1 400 Bad Request
          Date: Fri, 04 Jul 2008 23:39:36 GMT
          Server: Apache
          Content-Length: 226
          Connection: close
          Content-Type: text/html; charset=iso-8859-1

          <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
          <html><head>
          <title>400 Bad Request</title>
          </head><body>
          <h1>Bad Request</h1>
          <p>Your browser sent a request that this server could not understand.<br />
          </p>
          </body></html>

          ich frage mich ob ich etwas total falsch gemacht habe ,(

          MFG
          bleicher

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

            na ja - ich habe es umgebaut - fputs() "drückt" es nun nich tzeile für zeile, sondern als ein längeres string rein.

            Das ist seltsam.

            Anfrage:

            POST /test.php HTTP/1.1
            Connection: close
            User-Agent: Mozilla/3.0 (Win95; I)
            Content-Type: application/x-www-form-urlencoded
            Content-Length: 18

            Hier sollte eigentlich eine Leerzeile sein, aber ich hoffe einfach mal, dass sie durch das Problem mit fputs() verschwunden ist.

            user=test&wert=bla

            ich frage mich ob ich etwas total falsch gemacht habe ,(

            Ja. Den Host-Header vergessen ;-)

            Gruß

            1. Und nochmal ich:

              Bleicher, ich hatte nicht grundlos dahingetippt, dass es mich einigen Aufwand gekostet hat, Dir RFCs herauszusuchen. In solchen "Request for Comments" sind detaillierte Definitionen von Protokollen und/oder programmiertechnischen Grundlagen zu finden, ohne die Du verständnislos von anderen Beispielen, wie eben HTTP POST-Request, nur abkupfern kannst. Bitte mache Dich mit den Grundlagen dessen, was Du gedenkst (programmiertechnisch / allgemein) zu lösen, vertraut!

              Gruß aus Berlin!
              eddi

              --
              Der Verweis auf die Grundlagen Deines Handelns, ist das Joch zur Freiheit.
              Aber so gilt: Allen Leuten Recht getan, ist keine Kunst, weil's jeder kann.
              1. Grüße,
                auf jeden fall schau ich es mir an - aber nicht vor 22-28.07 >_<
                MFG
                bleicher

                --
                __________________________-
                Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
                http://www.sexgott-or-not.com/?test=428054
            2. Hallo,

              POST /test.php HTTP/1.1
              Connection: close
              User-Agent: Mozilla/3.0 (Win95; I)
              Content-Type: application/x-www-form-urlencoded
              Content-Length: 18
              user=test&wert=bla

              Ja. Den Host-Header vergessen ;-)

              desweiteren ist zwischen den Headern und dem Messagebody zwingend eine Leerzeile zu setzen (vgl. RFC 2616 Abs. 4.1 "Message Types"!).

              Gruß aus Berlin!
              eddi

              --
              Der Verweis auf die Grundlagen Deines Handelns, ist das Joch zur Freiheit.
              Aber so gilt: Allen Leuten Recht getan, ist keine Kunst, weil's jeder kann.