国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

PHP實現發送和接收JSON請求

2020-02-15 21:40:56
字體:
來源:轉載
供稿:網友

現在微服務中,很多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 >= 5use GuzzleHttp/Client;$client = new Client();$response = $client->post('url', [ GuzzleHttp/RequestOptions::JSON => ['foo' => 'bar']]);

Laravel中接受JSON POST

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

//IN controllerpublic 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'}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇左市| 衡山县| 沁阳市| 永修县| 阿图什市| 昭平县| 宣威市| 萝北县| 屏南县| 阳江市| 曲周县| 诸暨市| 扶沟县| 昆明市| 清涧县| 楚雄市| 南乐县| 和硕县| 咸阳市| 武宣县| 梓潼县| 赫章县| 安福县| 安乡县| 安西县| 松溪县| 新宁县| 天全县| 扶风县| 锦屏县| 荆州市| 肥西县| 富阳市| 连平县| 平罗县| 桦南县| 嘉善县| 睢宁县| 辽阳市| 松阳县| 南乐县|