摘要:發(fā)送接受是個(gè)可以訪問請(qǐng)求的原始數(shù)據(jù)的只讀流。在之前打開的數(shù)據(jù)流只能讀取一次數(shù)據(jù)流不支持操作。不過,依賴于的實(shí)現(xiàn),請(qǐng)求體數(shù)據(jù)被保存的時(shí)候,它可以打開另一個(gè)數(shù)據(jù)流并重新讀取。
現(xiàn)在微服務(wù)中,很多API由于需要傳遞的參數(shù)較多所以要求用包含所有參數(shù)的JSON數(shù)據(jù)作為POST請(qǐng)求的請(qǐng)求體來替代FormData傳遞參數(shù)的方式,在參數(shù)量較多時(shí)POST JSON要比POST FormData便于開發(fā)和測(cè)試,今天我們就來看一下在PHP中如何發(fā)送和接受JOSN POST,以及在Laravel框架中針對(duì)JSON Request提供的訪問JSON請(qǐng)求數(shù)據(jù)的便捷方法。
PHP發(fā)送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);
php://input?是個(gè)可以訪問請(qǐng)求的原始數(shù)據(jù)的只讀流。 POST 請(qǐng)求的情況下,最好使用?php://input?來代替?$HTTP_RAW_POST_DATA,因?yàn)樗灰蕾囉谔囟ǖ?php.ini?指令。 而且,這樣的情況下?$HTTP_RAW_POST_DATA?默認(rèn)沒有填充, 比激活?always_populate_raw_post_data?潛在需要更少的內(nèi)存。?enctype="multipart/form-data"?的時(shí)候?php://input?是無(wú)效的。使用Guzzle發(fā)送JSON請(qǐng)求Note:?在 PHP 5.6 之前?php://input?打開的數(shù)據(jù)流只能讀取一次; 數(shù)據(jù)流不支持 seek 操作。 不過,依賴于 SAPI 的實(shí)現(xiàn),請(qǐng)求體數(shù)據(jù)被保存的時(shí)候, 它可以打開另一個(gè)?php://input?數(shù)據(jù)流并重新讀取。 通常情況下,這種情況只是針對(duì) POST 請(qǐng)求,而不是其他請(qǐng)求方式,比如 PUT 或者 PROPFIND。
很多時(shí)候在開發(fā)中我們并不會(huì)像上面那樣用php curl庫(kù)來發(fā)送請(qǐng)求而是使用開源的Http包,常用的Http package比如 Guzzle都有為發(fā)送JSON請(qǐng)求提供了便捷的方法。
//Guzzle version >= 5 use GuzzleHttpClient; $client = new Client(); $response = $client->post("url", [ GuzzleHttpRequestOptions::JSON => ["foo" => "bar"] ]);Laravel中接受JSON POST
使用Request的json()->all()獲取請(qǐng)求體里的整個(gè)JSON
//IN controller public function recieveJson(Request $request) { $request->json()->all(); //返回值是一個(gè)數(shù)組 //針對(duì)前面的請(qǐng)求例子,json方法返回的是數(shù)組 ["foo" => "bar"] //$request->json()返回的是ParamBage }
使用Request的input方法獲取請(qǐng)求中的整個(gè)JSON或者具體key的值
發(fā)送 JSON 請(qǐng)求到Laravel應(yīng)用的時(shí)候,只要 Content-Type 請(qǐng)求頭被設(shè)置為?application/json,都可以通過?input?方法獲取 JSON 數(shù)據(jù),還可以通過“.”號(hào)解析數(shù)組:
public function laravelRecieveJson(Reuqest $request) { $foo = $request->input("foo");//echo $foo => "bar" //使用點(diǎn)號(hào)獲取內(nèi)嵌數(shù)組key的值 //假設(shè)請(qǐng)求體中的JSON為 {"user": {"name": "kevin", "age": 18}} $name = $reqeust->input("user.name");//echo $name => "kevin" }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28763.html
摘要:響應(yīng)一般由三個(gè)部分組成由一個(gè)數(shù)字和文字組成的狀態(tài)碼,用來顯示請(qǐng)求是成功還是失敗響應(yīng)頭,包含服務(wù)器類型,日期時(shí)間,內(nèi)容類型和長(zhǎng)度等響應(yīng)體,也就是響應(yīng)正文。獲得形式的相應(yīng)數(shù)據(jù)。和以數(shù)字和文本形式返回狀態(tài)碼。 學(xué)習(xí)目錄: AJAX基礎(chǔ) PHP與AJAX JSON格式 jQuery中的AJAX 個(gè)人網(wǎng)站原創(chuàng)鏈接地址:不足之處歡迎留言...逃... showImg(https://segm...
摘要:響應(yīng)一般由三個(gè)部分組成由一個(gè)數(shù)字和文字組成的狀態(tài)碼,用來顯示請(qǐng)求是成功還是失敗響應(yīng)頭,包含服務(wù)器類型,日期時(shí)間,內(nèi)容類型和長(zhǎng)度等響應(yīng)體,也就是響應(yīng)正文。獲得形式的相應(yīng)數(shù)據(jù)。和以數(shù)字和文本形式返回狀態(tài)碼。 學(xué)習(xí)目錄: AJAX基礎(chǔ) PHP與AJAX JSON格式 jQuery中的AJAX 個(gè)人網(wǎng)站原創(chuàng)鏈接地址:不足之處歡迎留言...逃... showImg(https://segm...
摘要:因?yàn)槭嵌噙M(jìn)程單線程同步模式,即一個(gè)子進(jìn)程同時(shí)最多處理一個(gè)請(qǐng)求,所以子進(jìn)程數(shù)等于最大并發(fā)數(shù)。 a little tips in my code career | 碼碼踩過的那些坑2015-2016 記一下這一年碼碼中我需要去了解的基礎(chǔ)知識(shí),有不對(duì)的歡迎大家指證出來:https://github.com/TIGERB/car... 關(guān)于設(shè)計(jì)模式 關(guān)于PHP 關(guān)于互聯(lián)網(wǎng)協(xié)議 設(shè)計(jì)模...
閱讀 3154·2021-11-22 14:45
閱讀 3300·2019-08-29 13:11
閱讀 2306·2019-08-29 12:31
閱讀 922·2019-08-29 11:21
閱讀 2991·2019-08-29 11:09
閱讀 3617·2019-08-28 18:11
閱讀 1420·2019-08-26 13:58
閱讀 1273·2019-08-26 13:27