中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP實現發送和接收JSON請求

發布時間:2020-09-03 21:14:13 來源:腳本之家 閱讀:199 作者:KevinYan 欄目:開發技術

現在微服務中,很多API由于需要傳遞的參數較多所以要求用包含所有參數的JSON數據作為POST請求的請求體來替代FormData傳遞參數的方式,在參數量較多時POST JSON要比POST FormData便于開發和測試,今天我們就來看一下在PHP中如何發送和接受JOSN POST,以及在Laravel框架中針對JSON Request提供的訪問JSON請求數據的便捷方法。

PHP發送JSON POST

$url = "http://example.com/request/post/json"; 
$data = json_encode(["foo" => "bar"]);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_exec($curl);
curl_close($curl);

PHP接受JSON POST

$data = json_decode(file_get_contents('php://input'), true);

$HTTP_RAW_POST_DATA](http://php.net/manual/zh/reserved.variables.httprawpostdata.php),因為它不依賴于特定的 php.ini 指令。 而且,這樣的情況下 [$HTTP_RAW_POST_DATA 默認沒有填充, 比激活 always_populate_raw_post_data 潛在需要更少的內存。 enctype="multipart/form-data" 的時候 php://input 是無效的。

Note: 在 PHP 5.6 之前 php://input 打開的數據流只能讀取一次; 數據流不支持 seek 操作。 不過,依賴于 SAPI 的實現,請求體數據被保存的時候, 它可以打開另一個 php://input 數據流并重新讀取。 通常情況下,這種情況只是針對 POST 請求,而不是其他請求方式,比如 PUT 或者 PROPFIND。

使用Guzzle發送JSON請求

很多時候在開發中我們并不會像上面那樣用php curl庫來發送請求而是使用開源的Http包,常用的Http package比如 Guzzle都有為發送JSON請求提供了便捷的方法。

//Guzzle version >= 5
use GuzzleHttp\Client;

$client = new Client();

$response = $client->post('url', [
 GuzzleHttp\RequestOptions::JSON => ['foo' => 'bar']
]);

Laravel中接受JSON POST

使用Request的json()->all()獲取請求體里的整個JSON

//IN controller
public function recieveJson(Request $request)
{
 $request->json()->all();
 //返回值是一個數組
 //針對前面的請求例子,json方法返回的是數組 ["foo" => "bar"]
 //$request->json()返回的是ParamBage
}

使用Request的input方法獲取請求中的整個JSON或者具體key的值

發送 JSON 請求到Laravel應用的時候,只要 Content-Type 請求頭被設置為 application/json,都可以通過 input 方法獲取 JSON 數據,還可以通過“.”號解析數組:

public function laravelRecieveJson(Reuqest $request)
{
  $foo = $request->input('foo');//echo $foo => 'bar'
  //使用點號獲取內嵌數組key的值
  //假設請求體中的JSON為 {"user": {"name": "kevin", "age": 18}}
  $name = $reqeust->input('user.name');//echo $name => 'kevin'
}

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

聂荣县| 石嘴山市| 成安县| 稻城县| 抚宁县| 高台县| 那曲县| 莱芜市| 黔西| 鄂州市| 玉树县| 上林县| 乳源| 临沂市| 绥德县| 镇沅| 辽中县| 福建省| 越西县| 宝兴县| 巫山县| 托克托县| 庆云县| 苏州市| 上饶县| 崇仁县| 静乐县| 平湖市| 阿拉善左旗| 海兴县| 牡丹江市| 东乌珠穆沁旗| 鄂伦春自治旗| 延庆县| 德江县| 溧水县| 屏东县| 阳新县| 勐海县| 承德县| 仙桃市|