『壹』 PHP使用POST傳遞json數據的接收與處理問題
前端傳給伺服器的只是json 格式的字元串,使用json_decode,
mixed json_decode ( string $json [, bool $assoc ] )
var_mp(json_decode($json));
var_mp(json_decode($json, true));
如果不帶參數,則返回為對象
帶上true時,內返回數組
foreach($ARR as $k=>$v){
echo 'key='.$k.';value='.$v;
}
單獨處理容每個key 和對應的value就好
『貳』 如何用curl post 一段包含中文json的文本到伺服器
一般中文json_encode之後會變成uxxxx的格式了,只要使用正規的json_encode處理,
不需要考慮中文問題。
至於如何post數據到伺服器,需要設定header,參考代碼如下:
<?php
#json數據
$url='http://test.com/curl/testPostJsonData.php';
$data='{"a":"b"}';
$length=strlen($data);
$header=array(
'Content-Length:'.$length,//不是必需的
'Content-Type:text/json',
);
$ch=curl_init($url);//初始化curl
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
$content=curl_exec($ch);//執行並存儲結果
curl_close($ch);
echo$content;
服務端需要使用$data=file_get_contents('php://input');獲取數據。
更多PHPcURL內容請參考我的博客《PHPcURL實現模擬登錄與採集使用方法詳解教程》
『叄』 php怎麼接收json類型數據
PHP接收JSON格式的數據
在API服務中,目前流行採用json形式來交互。
給前端調用的介面輸出Json數據,這個比較簡單,只需要組織好數據,用json_encode($array) 轉化一下,前端就得到json格式的數據。
接收前端提交的json數據稍微復雜一點,原因是:PHP默認識別的數據類型是application/x-www.form-urlencoded標準的數據類型。因此,對型如text/xml 或者 soap 或者 application/octet-stream 和application/json格式之類的內容無法解析,如果用$_POST數組來接收就會失敗!
此時可以使用$GLOBALS['HTTP_RAW_POST_DATA'] 或 file_get_contents('php://input') 來獲取提交的數據
查看手冊,可以發現$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST的區別:
$_POST:通過 HTTP POST 方法傳遞的變數組成的數組,是自動全局變數。
$GLOBALS['HTTP_RAW_POST_DATA'] :總是產生 $HTTP_RAW_POST_DATA 變數包含有原始的 POST 數據。此變數僅在碰到未識別 MIME 類型的數據時產生。$HTTP_RAW_POST_DATA 對於 enctype="multipart/form-data" 表單數據不可用。也就是說基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一樣的。但是如果post過來的數據不是PHP能夠識別的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,比如 text/xml 或者 soap 等等。
補充說明:PHP默認識別的數據類型是application/x-www.form-urlencoded標準的數據類型。
『肆』 如何在.net中模擬post方式提交json數據
nuget安裝Microsoft.Net.Http
HttpClientclient=newHttpClient();
stringpostJson=JsonConvert.SerializeObject(object);
StringContentcontent=newStringContent(postJson,Encoding.UTF8,"application/json");
client.Timeout=newTimeSpan(0,0,15);
=awaitclient.PostAsync(url,content);
byte[]urlContents=awaithttpResponse.Content.ReadAsByteArrayAsync();