在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
html中select语句读取mysql表中内容
Oct 09 PHP
PHP+MySQL 手工注入语句大全 推荐
Oct 30 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
php实现图片缩放功能类
Dec 18 PHP
PHP中的reflection反射机制测试例子
Aug 05 PHP
详解js异步文件加载器
Jan 24 PHP
php基于curl重写file_get_contents函数实例
Nov 08 PHP
解决php extension 加载顺序问题
Aug 16 PHP
phpinfo的知识点总结
Oct 10 PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 PHP
详细分析PHP 命名空间(namespace)
Jun 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中static静态变量的使用方法详解
2010/06/04 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
javascript 继承实现方法
2009/08/26 Javascript
JavaScript入门之基本函数详解
2011/10/21 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
Python字符串的常见操作实例小结
2019/04/08 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
python批量解压zip文件的方法
2019/08/20 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
会计人员岗位职责
2014/03/19 职场文书
阳光体育活动总结
2014/04/30 职场文书
租房协议书
2014/09/12 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书