Ankündigung

Einklappen
Keine Ankündigung bisher.

POST xml auslesen

Einklappen

Neue Werbung 2019

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

  • POST xml auslesen

    Hallo,

    ich habe da ein Problem, ich weiss nicht wie ich an ein xml komme, welches mir per Post übergeben wird.

    register_globals ist auf off und kann auch nicht geändert werden.

    Ich bekomme ein Paket, welches so aussieht

    POST xxx.php HTTP/1.1
    Content-type: text/xml
    ...
    <?xml version = 1.0" ...>

    Mein Problem $_POST ist leer. Wie komme ich denn nun an das xml ran. Kann mir da jemand helfen?

    Danke

  • #2
    Hallo yneu,

    zunächst mal ein Herzliches Willkommen im Forum von meiner Seite!


    Mein Problem $_POST ist leer. Wie komme ich denn nun an das xml ran. Kann mir da jemand helfen?
    Wie schickst du denn dieses XML ab? Hast du dazu ein Formular definiert? Bitte ein wenig mehr Informationen geben, denn sonst kann ich nur raten.
    Viele Grüße,
    Dr.E.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1. Think about software design [B]before[/B] you start to write code!
    2. Discuss and review it together with [B]experts[/B]!
    3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
    4. Write [I][B]clean and reusable[/B][/I] software only!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Kommentar


    • #3
      Abschicken

      Hallo,

      ich versende selber das Formular leider gar nicht. Dies kommt von jemand anderem. Wenn ich selber ein POST-Formular mache, in dem ich das xml eingebe und per POST versende, dann ist auch die $_POST-Variable gefüllt. Dann sieht das Paket auch anders aus (habe ich jetzt nicht vorliegen dort steht aber so etwas wie oben POST und am Ende eingabe=<?xml ...>, da ich in dem Formular das Feld mit name="eingabe" hinterlegt habe. Ich hatte die Vermutung das es vielleicht daran liegt, dass das einkommende Paket den Content-type: text/xml hat, und bei meinem Formular ist es Content-type: text/html. Wie kann ich den bei einem Formular sagen, dass ich es als text/xml verschicken will? Ich finde es komisch, da ja wie gesagt in dem einkommenden Paket ja oben POST und unten das xml steht, es steht nur nicht in der $_POST.

      Danke
      Gruß

      Kommentar


      • #4
        Hallo yneu,

        klingt mir irgendwie wild, was du da so treibst. Grundsätzlich würde ich versuchen, mir mal das anzusehen, was bei mir (=dir) ankommt. Das kannst du beispielsweise mal mit einem

        PHP-Code:
        <?php
           
        echo '<pre>'.print_r($_SERVER,true).'</pre>';
           echo 
        '<pre>'.print_r($_REQUEST,true).'</pre>';
        ?>
        in der Datei erledigen, die vom Formular aufgerufen wir. Problematisch kann der Content-Type dann werden, wenn der Webserver so konfiguriert ist, dass er unterschiedliche MIME-Types unterschiedlich behandelt. Hast du direkten Zugriff auf die Logfiles, kannst du das Verhalten ja mal analysieren. Solltes der Post bis zu PHP-Datei "durch kommen", hilft dir mein Beispiel.
        Viele Grüße,
        Dr.E.

        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        1. Think about software design [B]before[/B] you start to write code!
        2. Discuss and review it together with [B]experts[/B]!
        3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
        4. Write [I][B]clean and reusable[/B][/I] software only!
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        Kommentar


        • #5
          Per POST gesendete Dateien sollten in $_FILES liegen, wenn als Encyription-Type "multipart/form-data" gewählt ist.

          Kommentar


          • #6
            man kann auch direkt auf ROW_POST_DATA zugreifen, wenn man php input ausliest. diese methode ist besonders gut geeignet, wenn zugrif auf php.ini verboten ist.
            probier bitte in deinem script, der daten empfängt diese zeile:
            echo file_get_contents('php://input');
            Slava
            http://bituniverse.com

            Kommentar


            • #7
              Was ich da über den Encryption-Type gesagt habe ist Quark. Hier wird die Datei ja nicht über Formular versendet.

              Kommentar


              • #8
                Da klappts nicht

                Hallo,

                habe nun das mit Request und Server versucht. Bei Request ist nichts drin, in Server steht

                ALL_HTTPHTTP_CONTENT_LENGTH:101HTTP_CONTENT_TYPE:t ext/xml; charset=ISO-8859-1HTTP_HOST:217.5.212.99HTTP_USER_AGENT:Jakarta Commons-HttpClient/2.0.2HTTP_REFERRER:GZuComHome s:0
                HTTPSoff s:1
                SCRIPT_NAME/xxx.php s:2
                HTTP_COOKIE s:3
                AUTH_PASSWORD s:4
                AUTH_TYPE s:5
                AUTH_USER s:6
                CONTENT_LENGTH101 s:7
                CONTENT_TYPEtext/xml; charset=ISO-8859-1 s:8
                PATH_TRANSLATEDDxx
                QUERY_STRING s:10
                REMOTE_ADDR xxx
                REMOTE_HOST xxx
                REMOTE_USER s:13
                REQUEST_METHODPOST s:14
                SERVER_NAMExxx
                SERVER_PORT80 s:16
                SERVER_PROTOCOLHTTP/1.1 s:17 SERVER_SOFTWAREMicrosoft-IIS/6.0 s:18
                APPL_MD_PATH/LM/W3SVC/1/ROOT s:19
                APPL_PHYSICAL_PATHd:\\\\inetpub\\\\wwwroot\\\\ s:20
                INSTANCE_ID1 s:21
                INSTANCE_META_PATH/LM/W3SVC/1 s:22
                LOGON_USER s:23
                REQUEST_URI s:24
                URL/xxx s:25
                PHP_SELF/xxx.php s:26
                HTTP_CONTENT_LENGTH101 s:27
                HTTP_CONTENT_TYPEtext/xml; charset=ISO-8859-1 s:28
                HTTP_HOSTxxx s:29
                HTTP_USER_AGENTJakarta Commons-HttpClient/2.0.2 s:30
                HTTP_REFERRERGZuComHome s:31
                DOCUMENT_ROOTd:\\\\inetpub\\\\wwwroot s:32
                Wie komme ich den nun an den Post dran? Von unserem Techniker hatte ich einen Auszug bekommen, wo das XML auch drinsteht, gesendet wird es also von den anderen Part.

                Das mit echo file_get_contents('php://input'); hatte auch nicht geklappt, brauche ich da etwas spezielles für?

                Danke für Eure Hilfe.

                Kommentar


                • #9
                  teste das mal
                  PHP-Code:
                  <?php
                  //datei php_sener.php
                  $xml='
                  <?xml version = "1.0" ?>
                  <document>
                  <mesage>Hallo Welt!</mesage>
                  <datum>'
                  .date('r').'</datum>
                  </document>'
                  ;

                  $page=dirname($_SERVER['PHP_SELF']).'/server.php';
                  $open fsockopen('127.0.0.1'80$errno$errstr10);
                  $send="POST $page HTTP/1.0\r\n";
                  $send .= "Content-Type: text/xml\r\n";
                  $send .= "Content-Length: " .strlen($xml) ."\r\n\r\n";
                  $send .= $xml;
                  fputs($open$send);//an server senden
                  $ausgabe='';
                   while (!
                  feof($open)) {//antwort vom server auslesen
                    
                  $ausgabe .= fgets($open4096);
                   }
                   
                  fclose($open);
                  //headr abschneiden
                   
                  preg_match_all('/^.*\r\n\r\n(.++)$/Us'$ausgabe$array);//nachgeändert
                  //ausgabe von XML, die von server gesendet wurde
                  //kannst du als xml-echoserver nennen :-)
                  echo $array[1][0];

                  ?>
                  und in gleichem ordner
                  PHP-Code:
                  <?php
                  //datei server.php
                  echo file_get_contents('php://input');
                  ?>
                  und ruffe jetzt php_sender.php auf.
                  Also bei mir funktioniert es.
                  wenn du nicht auf dem localem rechner arbeitest, muss du natürich statt 127.0.0.1 eine domane eintragen.
                  Slava
                  http://bituniverse.com

                  Kommentar


                  • #10
                    Ich hab's geschafft.

                    Hallo,

                    ich hatte nun schon eine Lösung gefunden.

                    In $GLOBALS["HTTP_RAW_POST_DATA"] stand das xml.

                    Danke für Eure Hilfe.

                    Kommentar


                    • #11
                      wenn always_populate_raw_post_data in php.ini auf off gesetzt ist und zugriff auf php.ini verboten ist, dann wird $GLOBALS["HTTP_RAW_POST_DATA"] nie mit den werten gefühlt. Aus diesem Grund würde ich dir doch empfehlen auf die rohdaten über 'php://input' zugreifen.
                      Slava
                      http://bituniverse.com

                      Kommentar

                      Lädt...
                      X