在PHP中实现使用Guzzle执行POST和GET请求


Posted in PHP onOctober 15, 2019

以往在项目中要用到第三方接口时会用到封装好的curl执行请求,现在有了更好的解决方案——Guzzle。

下面是官方介绍:

Guzzle是一个PHP的HTTP客户端,用来轻而易举地发送请求,并集成到我们的WEB服务上。

接口简单:构建查询语句、POST请求、分流上传下载大文件、使用HTTP cookies、上传JSON数据等等。

发送同步或异步的请求均使用相同的接口。

使用PSR-7接口来请求、响应、分流,允许你使用其他兼容的PSR-7类库与Guzzle共同开发。

抽象了底层的HTTP传输,允许你改变环境以及其他的代码,如:对cURL与PHP的流或socket并非重度依赖,非阻塞事件循环。

中间件系统允许你创建构成客户端行为。

安装

composer require guzzlehttp/guzzle //用composer安装最新guzzle,当前是6.3版

GET请求示例

$client = new GuzzleHttp\Client(); //初始化客户端
$response = $client->get('http://httpbin.org/get', [
   'query' => [ //get查询字符串参数组
    'a' => '参数a的值',
    'b' => '参数b的值',
   ],
   'timeout' => 3.14 //设置请求超时时间
  ]);
  
//  与上面一条等价
//  $response = $client->request('GET','http://httpbin.org/get', [
//   'query' => [  
//    'a' => '参数a的值',
//    'b' => '参数b的值',
//   ],
//   'timeout' => 3.14 
//  ]);

$body = $response->getBody(); //获取响应体,对象
$bodyStr = (string)$body; //对象转字串,这就是请求返回的结果
echo $bodyStr;

类似的请求方法还有:

$response = $client->get('http://httpbin.org/get');
$response = $client->delete('http://httpbin.org/delete');
$response = $client->head('http://httpbin.org/get');
$response = $client->options('http://httpbin.org/get');
$response = $client->patch('http://httpbin.org/patch');
$response = $client->post('http://httpbin.org/post');
$response = $client->put('http://httpbin.org/put');

POST请求示例

$client = new GuzzleHttp\Client();
//普通表单`application/x-www-form-urlencoded`的POST请求
$response = $client->post('http://httpbin.org/post', [
 'form_params' => [  //参数组
  'a' => 'aaa',
  'b' => 'bbb',
  'nested_field' => [ //参数允许嵌套多层
   'A' => 'AAA',
   'B' => 'BBB',
  ]
 ],
]);
  
  //包含文件上传的表单`multipart/form-data`的POST请求
//  $response = $client->post('http://httpbin.org/post', [
//   'multipart' => [ //注意这个参数组的键名与前一个不同
//    [
//     'name' => 'a', //字段名
//     'contents' => 'aaa' //对应的值
//    ],
//    [
//     'name' => 'upload_file_name', //文件字段名
//     'contents' => fopen('/data/test.md', 'r') //文件资源
//    ],
//   ]
//  ]);
  
  $body = $response->getBody(); //获取响应体,对象
  $bodyStr = (string)$body; //对象转字串
  echo $bodyStr;

以上便是Guzzle的POST和GET请求的基本介绍,相信很多时间掌握这两个语法方法已经能满足项目开发的需求了。当然这只是强大的Guzzle功能中很小的一部份,感兴趣的同学想深入了解的可以参考官方文档。希望大家多多支持三水点靠木。

Guzzle6中文文档参考

PHP 相关文章推荐
谈谈PHP语法(2)
Oct 09 PHP
php+mysql事务rollback&commit示例
Feb 08 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
php5.3 goto函数介绍和示例
Mar 21 PHP
PHP利用MySQL保存session的实现思路及示例代码
Sep 09 PHP
PHP使用feof()函数读文件的方法
Nov 07 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
Jan 21 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
Yii中的relations数据关联查询及统计功能用法详解
Jul 14 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
Thinkphp5框架异常处理操作实例分析
Jun 03 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
Oct 15 #PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 #PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
Oct 15 #PHP
解决laravel 表单提交-POST 异常的问题
Oct 15 #PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 #PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
Oct 15 #PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
Oct 15 #PHP
You might like
PHP调用三种数据库的方法(3)
2006/10/09 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
Jquery 弹出层插件实现代码
2009/10/24 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
javascript异常处理实现原理详解
2020/02/17 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
手把手教你python实现SVM算法
2017/12/27 Python
python后端接收前端回传的文件方法
2019/01/02 Python
django的settings中设置中文支持的实现
2019/04/28 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
找到不普通的东西:Bonanza
2016/10/20 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
日本订房网站,预订日本星级酒店/温泉旅馆:Relux(支持中文)
2020/01/03 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
商务邀请函
2015/01/30 职场文书