2014-10-01 55 views
0

所以我使用POST將數據從Java發送到PHP API。如何從Java REST API請求解碼PHP中的JSON?

我想要做的是在POST請求中發送一個特定的變量給API,然後在我的PHP中使用它的值。但是目前在PHP中,$_POST["variable1"]是空的。

腳本肯定會被調用,因爲每次發送郵件時都會發送一封電子郵件,但PHP並未讀取POST變量。

我的Java看起來是這樣的:

String line; 
StringBuffer jsonString = new StringBuffer(); 

try { 
    URL url = new URL("https://www.x.com/api.php"); 
    String payload = "{\"variable1\":\"value1\",\"variable2\":\"value2\"}"; 

    HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

    connection.setDoInput(true); 
    connection.setDoOutput(true); 
    connection.setRequestMethod("POST"); 
    connection.setRequestProperty("Accept", "application/json"); 
    connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 
    OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); 
    writer.write(payload); 
    writer.close(); 

    BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
    while ((line = br.readLine()) != null) { 
     jsonString.append(line); 
    } 
    br.close(); 
    connection.disconnect(); 
} 

這是基於:How to send Request payload to REST API in java?

而且PHP API包含此:

if (isset($_POST["variable1"]) && isset($_POST["variable2"])) { 
    //Send email containing POST values 
    //Send 200 success header 
} else { 
    //Send error email 
    //Send 400 error header 
} 

目前,我每一次我得到了錯誤的電子郵件運行Java代碼。所以它發送到API,但是這個值沒有被正確讀取。

我用Java正確發送它嗎?或者我錯過了PHP中的某些東西?我需要做些什麼來解碼它嗎?

感謝您的任何幫助。我一直在研究這一點,似乎無法解決問題。

回答

0

你可以嘗試使用,而不是你的字符串變量的有效載荷下面的代碼:

List<NameValuePair> payload = new ArrayList<NameValuePair>(); 

payload.add(new BasicNameValuePair("variable1", "value1"); 

這對我來說

2

$_POST變量沒有設置對所有HTTP POST請求,但只針對特定工作類型,例如application/x-www-form-urlencoded。

由於您發佈的請求包含JSON實體(application/json),因此您需要按如下方式訪問它。

$json = file_get_contents('php://input'); 
$entity= json_decode($json, TRUE); 
+0

該死的你快了xD拿我的勳章! – Andreas 2014-10-01 20:14:07

+0

您可以請擴展此。然後,我如何從$ entity中檢索值?我試過'$ entity-> variable'和'$ entity - > {「variable」}',但都沒有工作。 – user3420034 2014-10-01 22:29:56

+0

看看'json_decode()'[documentation](http://php.net/manual/en/function.json-decode.php)。第二個參數決定是否返回關聯數組。這應該工作'$實體['變量1']'。 – pgiecek 2014-10-01 22:42:02