现在微服务中,很多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);

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请求提供了便捷的方法。

//Guzzle version >= 5
use GuzzleHttp\Client;$client = new Client();$response = $client->post('url', [GuzzleHttp\RequestOptions::JSON => ['foo' => 'bar']
]);

Laravel中接受JSON POST

  1. 使用Requestjson()->all()获取请求体里的整个JSON
//IN controller
public function recieveJson(Request $request)
{$request->json()->all();//返回值是一个数组//针对前面的请求例子,json方法返回的是数组 ["foo" => "bar"]//$request->json()返回的是ParamBage
}
  1. 使用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'
}

PHP发送和接收JSON请求相关推荐

  1. 使用firefox插件httperrequest,模拟发送及接收Json请求

    目标:使用httpreques\Json-Handle\tcpdump\wireshark工具进行,抓取手机访问网络的包,分析request及response请求,通过httprequester来实现 ...

  2. UnityWebRequest.Post 发送和接收Json数据

    1.C#:发送和接收Json数据 using UnityEngine; using UnityEngine.Networking; using System.Collections; using Un ...

  3. nodejs库express是如何接收inbound json请求的

    这样几行简单的代码创建一个web服务器: var express = require('express'); var app = express(); var server = require('ht ...

  4. express bodyparser_nodejs库express是如何接收inbound json请求的

    这样几行简单的代码创建一个web服务器: var express = require('express'); var app = express(); var server = require('ht ...

  5. JavaScript XMLHttpRequest向Flask发送和接收请求

    1,HTML中使用JS向Flask接口发POST请求,Flask返回text 2,JS接收响应,将内容显示在HTML中. HMTL代码: <!DOCTYPE html> <html ...

  6. python接收http请求_python通过get,post方式发送http请求和接收http响应

    您可能感兴趣的话题: python 核心提示: 本文实例讲述了python通过get,post方式发送http请求和接收http响应的方法.分享给大家供大家参考. 本文实例讲述了python通过get ...

  7. postman发送json请求,使用案例

    介绍:  postman是一个很好的http模拟器,,可以发送get.post.put等各种请求,是测试服务接口相当好的工具. postman发送json请求,使用案例 发送json的具体步骤: 1. ...

  8. httpf发送 json_Java用HttpClient3发送http/https协议get/post请求,发送map,json,xml,txt数据...

    使用的是httpclient 3.1, 使用"httpclient"4的写法相对简单点,百度:httpclient https post 当不需要使用任何证书访问https网页时, ...

  9. Httpclient发送json请求

    一.Httpclient发送json请求 public String RequestJsonPost(String url){     String strresponse = null;     t ...

最新文章

  1. 主机电源全是黑线怎么短接_汽车胎压监测即将成为强制标准,听听老司机怎么说...
  2. LCN分布式事务框架实战
  3. 4x3矩阵键盘扫描法c语言,四种4*4矩阵键盘的扫描方法
  4. jQuery的AJAX常用属性及解释
  5. 被迫“内卷”的程序员,真的就不值钱了吗?
  6. java 关闭阻塞线程池_如果优雅地关闭ExecutorService提供的java线程池
  7. oom机制分析及对应优化策略
  8. GDB scheduler-locking 命令详解
  9. Redis环境配置和命令语句
  10. ios设备开发教程-利用app申请ios开发证书及描述文件
  11. 基于51单片机——60秒倒计时时钟
  12. (附源码)node.js物资管理系统 毕业设计 071130
  13. android 字符串大小写转换
  14. matlab三相变压器,simulink三相变压器
  15. Word——图表如何交叉引用-插入题注-交叉引用
  16. 微信小程序 (布局适配与物理逻辑像素)
  17. AEC IATF16949 - AEC-Qxxx 质量体系IATF16949 -芯片进入汽车领域的门槛
  18. Windows 2003全面优化
  19. 国家电网:企业数字化发展的“3-3-4”框架!
  20. 明明有网 但是下边显示小地球怎么办 一招解决

热门文章

  1. Android 圆角TabLayout
  2. SQL Server 2008 R2 数据库安装
  3. 如何在MySQL随机选择记录
  4. 《智慧书》格言91-100
  5. webpack入门学习手记(一) 1
  6. js初级——复习html+css
  7. 「旁门右道」CURL持久连接技巧
  8. php使用phantomjs
  9. 新浪安装weiphp2.0的方法
  10. WINDOWS SERVER 2003从入门到精通之林之间的信任关系