POST XML Daten



  • POST http://testhost:8080/servlet/test_servlet.test HTTP/1.1
    Host: testhost:8080
    Pragma: no-cache
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, /
    Content-Type: text/xml
    Content-Length: 534
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE MESSAGES SYSTEM "GENERAL.dtd">
    <MESSAGES>
    <SMS2HTTP_MSG>
    <TIMESTAMP>01.01.1970 01.00.00</TIMESTAMP>
    <RECEIVER>004988888</RECEIVER>
    <ORIGINATOR>+491737777777</ORIGINATOR>
    <SOURCE_PRV>42</SOURCE_PRV>
    <SMS TYPE="ALPHANUM">this is a test1</SMS>
    </SMS2HTTP_MSG>
    <SMS2HTTP_MSG>
    <TIMESTAMP>01.01.1970 01.00.00</TIMESTAMP>
    <RECEIVER>004966666</RECEIVER>
    <ORIGINATOR>00491737777777</ORIGINATOR>
    <SOURCE_PRV>15</SOURCE_PRV>
    <SMS TYPE="ALPHANUM">this is a test2</SMS>
    </SMS2HTTP_MSG>
    </MESSAGES>

    Ich bekomme z.B. das hier auf ein PHP-Script rein. Mein Problem ist:
    In welcher Variable finde ich den XML-Teil.

    Wenn ich an den Parser ein File übergebe dann funktioniert es. Statt des Files möchte ich jetzt die POST-Daten nehmen. Normalerweise steht ja in $_POST[] der Inhalt der Variable. Aber diue gibt es ja hier nicht.

    Danke


  • Mod

    2 Möglichkeiten:

    $HTTP_RAW_POST_DATA

    Damit gibt es allerdings hin und wieder Probleme - ich kenne mich damit aber nicht aus.

    fopen("php://input", "r")
    erst ab PHP 4.3 oder so. also etwas relativ neues. Hier kannst du einfach von stdin die Daten lesen.



  • Wenn ich es mit fopen öffnen und lese dann steht nichts drin. Habe php 4.3.4.

    function parse ( ) 
            { 
                xml_set_object ( $this->parser, &$this ); 
                xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false); 
                xml_set_character_data_handler ( $this->parser, "element_data" ); 
                xml_set_element_handler ( $this->parser, "element_start", "element_close" ); 
    
                if (  !($fp = fopen ( "php://input", "r" ))  ) 
                {
    
                	die ( "Opening XML-File failed!\n" ); 
                }
    
                while (  $data = fread ( $fp, 2048 ) ) 
                { 
    
                    if ( !xml_parse ( $this->parser, $data, feof($fp) )  ) 
                    { 
                        die(sprintf("XML error: %s at line %d", 
                                        xml_error_string( xml_get_error_code($this->parser)), 
                                        xml_get_current_line_number($this->parser))); 
                    } 
                } 
    
            }
    

  • Mod

    Also bei meinem PHP 4.3.2 hat folgendes geklappt:

    $f=fopen("php://input", "r");
    $str=fread($f, 1024);
    echo $str;
    

    Teste es mal mit ner ganz simpen Form, die du per POST übergibst.

    uU ist die Anfrage vielleicht falsch?



  • Habs geschafft. Dier Anfrage war falsch. Danke


Anmelden zum Antworten