網頁中發送請求時,大部分情況都參數以鍵值組合發送數據的,而一些第三方如java開發的接口中需要發送post請求,請求參數為json類型。
既然要發送json數據,首頁我們需要在請求頭中定義數據類型為json,告訴服務器客服端發送過來的數據類型為json,設置請求頭內容類型:Content-Type: application/json; charset=utf-8
php發送post請求的json參數代碼,curl實現:<?php
//如果接口返回的數據為json,這里需要先定義數據類型為json
header("Content-type:application/json;charset=utf-8");
$url?=?"http://zixuephp.net";
$data?=?array('a'=>'test1','b'=>'test2','c'=>array('1','2','3'));
//這里需要注意的是這里php會自動對json進行編碼,而一些java接口不自動解碼情況(中文)
//$json_data?=?json_encode($data,JSON_UNESCAPED_UNICODE);
$json_data?=?json_encode($data);
//curl方式發送請求
$ch?=?curl_init();
//設置請求為post
curl_setopt($ch,?CURLOPT_POST,?1);
//請求地址
curl_setopt($ch,?CURLOPT_URL,?$url);
//json的數據
curl_setopt($ch,?CURLOPT_POSTFIELDS,?$json_data);
curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?1);
//顯示請求頭
//curl_setopt($ch,?CURLOPT_HEADER,?1);
curl_setopt($ch,?CURLINFO_HEADER_OUT,?true);
//請求頭定義為json數據
curl_setopt($ch,?CURLOPT_HTTPHEADER,?array(
'Content-Type:application/json;charset=utf-8',
'Content-Length:?'.strlen($jsonStr)
)
);
$response?=?curl_exec($ch);
//echo?curl_getinfo($ch,?CURLINFO_HTTP_CODE);
//echo?curl_getinfo($ch,?CURLINFO_HEADER_OUT);
curl_close($ch);
//var_dump($response;)
echo?$response;
php發送post請求json數據,curl函數的實現。同理,也可以使用file_get_contents函數進行實現post請求,也能實現上面的功能。
php接收post請求json參數代碼,不能再用$_POST方式接收,會接收不到數據,因為現在的內容類型是Content-Type:application/json;charset=utf-8,使用$_POST接收的類型為application/x-www-form-urlencoded或multipart/form-data類型://接收post請求來的json數據
$data?=?file_get_contents('php://input');
//json轉php數組
$data?=?json_decode($data,?true);
var_dump($data);