在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 相关文章推荐
数据库的日期格式转换
Oct 09 PHP
在数据量大(超过10万)的情况下
Jan 15 PHP
php入门教程 精简版
Dec 13 PHP
php下mysql数据库操作类(改自discuz)
Jul 03 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
Aug 08 PHP
PHP序列号生成函数和字符串替换函数代码
Jun 07 PHP
SSO单点登录的PHP实现方法(Laravel框架)
Mar 23 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
PHPStrom 新建FTP项目以及在线操作教程
Oct 16 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 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实现框架(二)
2006/10/09 PHP
WINXP下apache+php4+mysql
2006/11/25 PHP
如何用PHP实现插入排序?
2013/04/10 PHP
php构造函数实例讲解
2013/11/13 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
jQuery AJAX回调函数this指向问题
2010/02/08 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
JS实现动态生成表格并提交表格数据向后端
2020/11/25 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
BootStrap 动态表单效果
2017/06/02 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
python:接口间数据传递与调用方法
2018/12/17 Python
python实现可逆简单的加密算法
2019/03/22 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
Python装饰器用法与知识点小结
2020/03/09 Python
python代码能做成软件吗
2020/07/24 Python
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
美术毕业生求职信
2014/02/25 职场文书
库房管理员岗位职责
2014/03/09 职场文书
专题组织生活会方案
2014/06/15 职场文书
装修施工安全责任书
2014/07/24 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis