国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP發送和接收JSON請求

PiscesYE / 2746人閱讀

摘要:發送接受是個可以訪問請求的原始數據的只讀流。在之前打開的數據流只能讀取一次數據流不支持操作。不過,依賴于的實現,請求體數據被保存的時候,它可以打開另一個數據流并重新讀取。

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

PHP發送JSON POST

</>復制代碼

  1. $url = "http://example.com/request/post/json";
  2. $data = json_encode(["foo" => "bar"]);
  3. $curl = curl_init($url);
  4. curl_setopt($curl, CURLOPT_HEADER, false);
  5. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  6. curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json"));
  7. curl_setopt($curl, CURLOPT_POST, true);
  8. curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  9. curl_exec($curl);
  10. curl_close($curl);
PHP接受JSON POST

</>復制代碼

  1. $data = json_decode(file_get_contents("php://input"), true);

</>復制代碼

  1. php://input?是個可以訪問請求的原始數據的只讀流。 POST 請求的情況下,最好使用?php://input?來代替?$HTTP_RAW_POST_DATA,因為它不依賴于特定的?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請求提供了便捷的方法。

</>復制代碼

  1. //Guzzle version >= 5
  2. use GuzzleHttpClient;
  3. $client = new Client();
  4. $response = $client->post("url", [
  5. GuzzleHttpRequestOptions::JSON => ["foo" => "bar"]
  6. ]);
Laravel中接受JSON POST

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

</>復制代碼

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

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

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

</>復制代碼

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/28763.html

相關文章

  • PHP與AJAX的相愛相殺

    摘要:響應一般由三個部分組成由一個數字和文字組成的狀態碼,用來顯示請求是成功還是失敗響應頭,包含服務器類型,日期時間,內容類型和長度等響應體,也就是響應正文。獲得形式的相應數據。和以數字和文本形式返回狀態碼。 學習目錄: AJAX基礎 PHP與AJAX JSON格式 jQuery中的AJAX 個人網站原創鏈接地址:不足之處歡迎留言...逃... showImg(https://segm...

    wthee 評論0 收藏0
  • PHP與AJAX的相愛相殺

    摘要:響應一般由三個部分組成由一個數字和文字組成的狀態碼,用來顯示請求是成功還是失敗響應頭,包含服務器類型,日期時間,內容類型和長度等響應體,也就是響應正文。獲得形式的相應數據。和以數字和文本形式返回狀態碼。 學習目錄: AJAX基礎 PHP與AJAX JSON格式 jQuery中的AJAX 個人網站原創鏈接地址:不足之處歡迎留言...逃... showImg(https://segm...

    Clect 評論0 收藏0
  • career-tips | 踩坑路

    摘要:因為是多進程單線程同步模式,即一個子進程同時最多處理一個請求,所以子進程數等于最大并發數。 a little tips in my code career | 碼碼踩過的那些坑2015-2016 記一下這一年碼碼中我需要去了解的基礎知識,有不對的歡迎大家指證出來:https://github.com/TIGERB/car... 關于設計模式 關于PHP 關于互聯網協議 設計模...

    kviccn 評論0 收藏0

發表評論

0條評論

PiscesYE

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<