在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程序中的常见漏洞进行攻击
Oct 09 PHP
在smarty模板中使用PHP函数的方法
Apr 23 PHP
应用开发中涉及到的css和php笔记分享
Aug 02 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
destoon整合ucenter后注册页面不跳转的解决方法
Jun 21 PHP
php+mysqli批量查询多张表数据的方法
Jan 29 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
php使用curl通过代理获取数据的实现方法
May 16 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 PHP
Laravel如何创建服务器提供者实例代码
Apr 15 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
Oct 09 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
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
解决laravel session失效的问题
2019/10/14 PHP
javascript类型转换使用方法
2014/02/08 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
2016/02/15 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
OpenCV 模板匹配
2019/07/10 Python
python实现拼图小游戏
2020/02/22 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
安全资金保障制度
2014/01/23 职场文书
小学数学国培感言
2014/03/10 职场文书
森林防火宣传标语
2014/06/27 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
青年联谊会致辞
2015/07/31 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
公司会议开幕词
2016/03/03 职场文书
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
MySQL 开窗函数
2022/02/15 MySQL
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python
mysql数据库如何转移到oracle
2022/12/24 MySQL