2010-06-29 68 views
1

通常,當我收到POST數據時,它將從HTML表單發送,並且參數具有名稱,即<input type="text" name="yourname" />,然後我可以使用php echo $_POST['yourname'];接收並打印這些數據。如何使用HTTP POST從Java應用程序發送XML並在服務器上使用PHP進行打印?

現在我正在實現一個Java應用程序,該應用程序應該以XML格式將數據發佈到指定的URL。我寫了一個簡單的PHP頁面,我可以嘗試POST數據,但數據不打印。由於沒有任何參數的名稱,我不知道我應該如何使用PHP打印它。

我試圖發送簡單的XML到服務器,服務器應迴應MESSAGE: <XML>,但它只響應MESSAGE:。我究竟做錯了什麼?

這裏是在服務器上我的PHP代碼:

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

這裏是在客戶端上我的Java代碼:

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

回答

3

號,$ _ POST陣列被只multipart/form-data ENCTYPE填充。

您可以使用fopen()函數在PHP://輸入包裝或$ HTTP_RAW_POST_DATA
http://www.php.net/manual/en/wrappers.php.php

+0

@Jonas您是否嘗試通過我上面發佈的鏈接閱讀手冊頁? – 2010-06-29 18:25:13

+0

是的,但我做了另一個錯誤,現在它工作正常,謝謝。 – Jonas 2010-06-29 18:47:40

+0

謝謝,它可以很好的使用這個PHP:'<?php echo'MESSAGE:'。$ HTTP_RAW_POST_DATA; ?>' – Jonas 2010-06-29 18:49:55

0

嘗試查看網頁的源代碼在瀏覽器中,你發佈的XML後,XML是不會顯示如果你正在查看頁面,除非你把它傳遞給htmlspecialchars()。 print_r($_POST);是xss所以要小心。

+0

print-r至少會打印出自己的格式化字符,比如花括號 – 2010-06-29 18:28:33

相關問題