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
-
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))); } } }
-
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