在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利用COM对象访问SQLServer、Access
Oct 09 PHP
fleaphp下不确定的多条件查询的巧妙解决方法
Sep 11 PHP
将文件夹压缩成zip文件的php代码
Dec 14 PHP
php feof用来识别文件末尾字符的方法
Aug 01 PHP
php设计模式 Command(命令模式)
Jun 26 PHP
PHP 第二节 数据类型之字符串类型
Apr 28 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
CURL的学习和应用(附多线程实现)
Jun 03 PHP
国产PHP开发框架myqee新手快速入门教程
Jul 14 PHP
10个简化PHP开发的工具
Dec 25 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
PHP实现类似题库抽题效果
Aug 16 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
一个简单的MySQL数据浏览器
2006/10/09 PHP
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
Vue内容分发slot(全面解析)
2017/08/19 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
js实现随机8位验证码
2020/07/24 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
深入理解Python变量与常量
2016/06/02 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
2020/12/31 Python
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
JNI的定义
2012/11/25 面试题
工商学院毕业生自荐信
2013/11/12 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
文案策划专业自荐信
2014/07/07 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
2019年学校消防安全责任书(2篇)
2019/10/09 职场文书
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫