2010-06-29 16 views
1

Habituellement, lorsque je reçois des données POST, il est envoyé à partir d'un formulaire HTML et les paramètres ont des noms, c'est-à-dire <input type="text" name="yourname" />, puis je peux recevoir et imprimer ces données avec php echo $_POST['yourname'];.Comment envoyer du code XML à partir d'une application Java et l'imprimer avec PHP sur le serveur à l'aide de HTTP POST?

Maintenant, je suis l'implémentation d'une application Java qui devrait POST des données au format XML à une URL spécifiée. J'ai écrit une simple page PHP que je peux essayer de POSTER des données, mais les données ne sont pas imprimées. Et comme il n'y a pas de nom de paramètres, je ne sais pas comment je devrais l'imprimer avec PHP.

J'ai essayé d'envoyer du XML simple au serveur et le serveur devrait répondre avec MESSAGE: <XML>, mais seulement la réponse avec MESSAGE:. Qu'est-ce que je fais mal?

Voici mon code PHP sur le serveur:

<?php 
echo 'MESSAGE:'; 
print_r($_POST); ?> 

Et voici mon code Java sur le client:

String xmlRequestStatus = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> 
    <test></test>"; 
String contentType = "text/xml"; 
String charset = "ISO-8859-1"; 
String request = null; 
try { 
    request = String.format("%s", 
     URLEncoder.encode(xmlRequestStatus, charset)); 
} catch (UnsupportedEncodingException e1) { 
    e1.printStackTrace(); 
} 
URL url = null; 
URLConnection connection = null; 
OutputStream output = null; 
InputStream response = null; 
try { 
    url = new URL("http://skogsfrisk.se/test/"); 
} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} 

try { 
    connection = url.openConnection(); 
    connection.setDoOutput(true); 
    connection.setRequestProperty("Accept-Charset", charset); 
    connection.setRequestProperty("Content-Type", contentType); 
    output = connection.getOutputStream(); 
    output.write(request.getBytes("ISO-8859-1")); 
    if(output != null) try { output.close(); } catch (IOException e) {} 

    response = connection.getInputStream(); 
    ... 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Répondre

3

Non, tableau $ _POST est peuplé uniquement avec multipart/form-data enctype .

vous pouvez utiliser fopen() avec php: // wrapper d'entrée ou $ HTTP_RAW_POST_DATA
http://www.php.net/manual/en/wrappers.php.php

+0

@Jonas Avez-vous essayé de lire la page de manuel par le lien que j'ai posté ci-dessus? –

+0

Oui, mais j'ai fait une autre erreur, maintenant ça marche bien, merci. – Jonas

+0

Merci, ça marche bien avec ce PHP: ' ' – Jonas

0

Essayez d'afficher la source de la page dans votre navigateur après que vous affichez le xml, xml ne va pas montrer si vous affichez la page normalement, sauf si vous la transmettez à htmlspecialchars(). print_r($_POST); est xss alors soyez prudent.

+0

print-r va imprimer au moins ses propres caractères de mise en forme comme des accolades –