Http request

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Http request

    Hallo!

    Ich versuche per PHP einen $_POST-REQ an eine webseite zu schicken.

    Mein Script
    PHP-Code:
         $data "";
         
    $boundary "---------------------".substr(md5(rand(0,32000)),0,10);
         
    $fp fsockopen($host80);
         if(
    $fp) {echo "OFFEN";}
     
         
    fputs($fp"POST $path HTTP/1.1\n");
         
         
    fputs($fp"Host: $host\n");
         
         
    // Ab dieser Stelle sammeln wir erstmal alle Daten in einem String
         // Sammeln der POST Daten
         
    foreach($postdata as $key => $val){
             
    $data .= "--$boundary\n";
             
    $data .= "Content-Disposition: form-data; name=\"".$key."\"\n\n".$val."\n";
         }
         
    $data .= "--$boundary\n";
     
     
         
    // Senden aller Informationen
         
    fputs($fp"Content-length: ".strlen($data)."\n\n");
         
         
    fputs($fp$data);

         
    $res "";
         
    // Auslesen der Antwort
         
    while(!feof($fp)) {
             
    $res .= fread($fp1);
         }
         
    fclose($fp);
     
         return 
    $res;
    }
     
    $postdata = array('name'=>'gustav85''betreff'=>'TESTmail''text'=>'DAS IST DER TEXT DAZU''switch'=>'msgInsert');


    echo 
    postToHost ("www.seite.de"0"schreiben.php"$postdata); 
    Nur kommt leider folgende Fehlermeldung:

    Code:
    HTTP/1.1 400 Bad Request Date: Wed, 16 Mar 2011 21:54:21 GMT Server: Apache Vary: Accept-Encoding Content-Length: 297 Connection: close Content-Type: text/html; charset=iso-8859-1
    Bad Request
    
    Your browser sent a request that this server could not understand.
    Liegts am Script?
    Beachte: Dumm ist, wer Dummes tut.

  • #2
    Hallo,

    jep, das liegt am Script. Die HTTP-Spezifikation verlangt CRLF als Zeilentrenner.

    Edit: Außerdem kann ich nicht erkennen, dass du diese HTTP-Nachricht irgendwo abschließt, was ebenfalls obligatorisch ist. Die Abschlusskennung ist "--" . $boundary . "--".

    Gruß,

    Amica
    Zuletzt geändert von AmicaNoctis; 17.03.2011, 08:54.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Warum überhaupt mit Boundaries, wenn du nur reine Text-Parameter sendest?

      Als application/x-www-form-urlencoded senden, und gut.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Und warum überhaupt eine solche selbst gebastelte Lösung?

        Fertige Alternativen:
        HTTP_Url_Wrapper
        cURL
        Snoopy
        Wir werden alle sterben

        Kommentar


        • #5
          Was heißt denn:
          Warum überhaupt mit Boundaries, wenn du nur reine Text-Parameter sendest?
          Als application/x-www-form-urlencoded senden, und gut.
          ?

          Wenn ich das Script vereinfachen/verkürzen könnte wäre das klasse. Aber wie?

          Ich will wie gesagt nur:

          HP öffnen, $_POST-Daten senden.
          das enspr. Script auf der HP wird ausgeführt.

          und gut. Mehr nicht.
          Beachte: Dumm ist, wer Dummes tut.

          Kommentar


          • #6
            Schau dir an, wie der Browser ein normales POST-Formular versendet (bspw. per Firebug) - und mach's analog.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Das heißt, dass application/x-www-form-urlencoded einfacher zusammenzubauen ist als multipart/form-data (das was du grad machst). Insgesamt kannst du das alles aber auch CURL überlassen, wenn du dich dafür entscheidest das zu nehmen.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Also

                jetzt gehts so weit

                PHP-Code:
                <?php
                include_once("mysql/mysql.inc");
                 
                function 
                PostToHost($host$path$referer$data_to_send) {
                  
                $fp fsockopen($host80);
                  
                printf("Open!\n");
                  
                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);
                  
                printf("Sent!\n");
                  
                $res true;
                  while(!
                feof($fp)) {
                      
                $res .= fgets($fp128);
                  }
                  
                printf("Done!\n");
                  
                fclose($fp);
                 
                  return 
                $res;
                }
                 
                $SELECT "SELECT * FROM TABELLE WHERE ZEILE = 'WERT' LIMIT 0,1";
                $SQL    mysql_query($SELECT);
                $DS        mysql_fetch_object($SQL);
                $WERT_1    $DS->BETREFF;
                $WERT_2    $DS->TEXT;

                $data "name=BLIBLABLUB&betreff=".$WERT_1."&text=".$WERT_2."&switch=msgInsert&submit.x=59&submit.y=12";

                echo 
                $data;
                printf("Go!\n");
                $x PostToHost(
                              
                "www.seide.de",
                              
                "/index.php",
                              
                "www.meineseite.de",
                              
                $data
                );

                ?>
                Problem ist, wenn $WERT_2 nun mehrzeilig ist, gehts nicht mehr... Wieso?!
                Beachte: Dumm ist, wer Dummes tut.

                Kommentar


                • #9
                  Zitat von bofan Beitrag anzeigen
                  Problem ist, wenn $WERT_2 nun mehrzeilig ist, gehts nicht mehr... Wieso?!
                  Vermutlich, weil du ihn immer noch nicht Kontext-gerecht kodiert hast.
                  -> urlencode
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    PHP: rawurlencode - Manual
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      Hm Komisch Komisch.


                      Also nun zeigt er mir endlich die Werte richtig an.

                      PHP-Code:
                      <?php

                      error_reporting
                      (E_ALL);

                      include_once(
                      "mysql/mysql.inc");
                       
                      function 
                      PostToHost($host$path$referer$data_to_send) {
                        
                      $fp fsockopen($host80);
                        
                      printf("Open!\n");
                        
                      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);
                        echo 
                      "<br>".$data_to_send."<br>";
                        
                      printf("Sent!\n");
                        
                      $res "";
                        while(!
                      feof($fp)) {
                            
                      $res .= fgets($fp128);
                        }
                        
                      printf("Done!\n");
                        
                      fclose($fp);

                        return 
                      $res;
                      }
                       
                       
                      $SELECT "SELECT * FROM `sg_trp_mail_vorlagen` WHERE trpm_bez = 'Begruessungsmail_neuer_Kamerad' LIMIT 0,1";
                      $SQL    mysql_query($SELECT);
                      $DS        mysql_fetch_object($SQL);
                      $WERT_1    rawurlencode ($DS->trpm_betreff);
                      $WERT_2    rawurlencode ($DS->trpm_text);


                      $data "name=gustav85&betreff=".$WERT_1."&text=".$WERT_2."&switch=msgInsert&submit.x=44&submit.y=11";

                      printf("Go!\n");
                      $x PostToHost(
                                    
                      "www.schulterglatze.de",
                                    
                      "/stammakte/feldpost/schreiben",
                                    
                      "http://www.schulterglatze.de/stammakte/feldpost/schreiben",
                                    
                      $data
                      );

                      ?>

                      Nur trägt er nix mehr ein.

                      Firebug gibt folgendes aus, wenn ich das Manuell eintrage:
                      Code:
                      Parameterapplication/x-www-form-urlencoded
                      betreff	TEXT Mail
                      name	gustav85
                      submit.x	0
                      submit.y	0
                      switch	msgInsert
                      text	Das ist eine kleine Testmail.
                      Quelle
                      Content-Type: application/x-www-form-urlencoded Content-Length: 105 name=gustav85&betreff=TEXT+Mail&text=Das+ist+eine+kleine+Testmail.&switch=msgInsert&submit.x=0&submit.y=0
                      sowie:
                      Code:
                      Anfrage-Header
                      
                      POST /stammakte/feldpost/schreiben HTTP/1.1
                      Host: www.schulterglatze.de
                      User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15 ( .NET CLR 3.5.30729; .NET4.0C)
                      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
                      Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
                      Accept-Encoding: gzip,deflate
                      Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
                      Keep-Alive: 115
                      Connection: keep-alive
                      Referer: http://www.schulterglatze.de/stammakte/feldpost/schreiben
                      Cookie: [ZULANG]
                      Beachte: Dumm ist, wer Dummes tut.

                      Kommentar

                      Lädt...
                      X