以下是PHP web service使用POST方式接收Json的程式碼:
<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){
$inputJson = $_POST['inputJson'];
if(!empty($inputJson)){
//......
}else{
$json = array("status" => 1, "msg" => "inputJson is empty");
}
}else{
$json = array("status" => 1, "msg" => "Request method not accepted");
}
header('Content-type: application/json;charset=utf-8');
echo json_encode($json);
?>
有兩個問題想請教大家:
(1) 使用postman測試,卻回傳Request method not accepted?
(2) 把最外面的if else註解,仍回傳inputJson is empty?
還請指點方向......謝謝。
沒看到你的$_POST['inputJson']; ?
不好意思,一直傳不進去,請問應該怎麼改@@
把全部的程式包括postman上的都放上來看看,不要放圖,
沒看到你post的code無法判斷
PS:先說聲不好意思,我在web service方面還是新手,如有缺失還請多包涵......
程式是全部了,另外,postman上的,請參考以下:
Headers:
Content-Type是application/json
Body:
選raw和JSON(application/json)
測試內容
{
"A":"TEST1",
"CON":{
"AA":[
"TEST",
"TEST",
"TEST"
],
"BB":[
"TEST",
"TEST",
"TEST"
]
}
}
依你的結構為主,你的結構想要接收json格式的資料,你用POST,code上是沒有問題,不過方法錯了
你要「傳入的值」是屬於"文本格式",跟$_POST & $_GET屬於key-value格式的處理方法不一樣
你可以改成用 I/O streams的方式處理傳入的值
<?php
$json = array();
if($_SERVER['REQUEST_METHOD'] == "POST"){
// 換成php://input
$inputJson = file_get_contents('php://input');
if(!empty(json_decode($inputJson))){
//......
}else{
$json = array("status" => 1, "msg" => "inputJson is empty");
}
}else{
$json = array("status" => 1, "msg" => "Request method not accepted");
}
header('Content-type: application/json;charset=utf-8');
echo json_encode($json);
?>
你用I/O streams的方式處理使用者傳入的資料要很謹慎(相較於POST來說),因為使用者可以傳任何的文本格式進場,
除非有特殊需要或是環境限制,不然是建議用key-value格式的傳輸格式,將每個欄位的型態跟長度定義好,再自行包裝json做處理
在postman上你要傳key-value可以用以下兩種格式
form-data - 可傳送的value包含檔案
x-www-form-urlencoded - 會對value進行encode的動作
以上兩種傳輸行為都可以透過$_POST來取值,這樣就跟你的寫法沒有太大差別,只要你的key對應到就可以取值。