在处理业务时,我们总是会发起一个http请求,比如请求远程接口,或者下载一个文件.很显然,在PHP中需要使用CURL,但是curl写起来实在是太不舒服了,又难写,也不易阅读.实际上PHP有很多扩展可以非常优雅的实现http请求,比如这篇文章要介绍的:guzzlehttp/guzzle.

guzzle的特点:

  • 接口简单:无论是一个简单地get请求,还是设置cookie,上传大文件,写起来都很简单
  • 可以发起异步请求,并且用法与同步请求一致
  • 使用PSR-7接口来请求、响应、分流,允许你使用其他兼容的PSR-7类库与Guzzle共同开发。
  • 抽象底层,并非完全依赖curl,也有其他的实现方式,比如php的stream或者socket
  • 支持中间件模式

一段guzzle的代码如下:

$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.github.com/user', ['auth' => ['user', 'pass']
]);
echo $res->getStatusCode();
// "200"
echo $res->getHeader('content-type')[0];
// 'application/json; charset=utf8'
echo $res->getBody();
// {"type":"User"...'// 发送一个异步请求.
$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
$promise = $client->sendAsync($request)->then(function ($response) {echo '加载完成! ' . $response->getBody();
});
$promise->wait();

相对于curl的写法,很简单,也很容易理解.

并且guzzle支持并发请求:

use GuzzleHttp\Client;
use GuzzleHttp\Promise;$client = new Client(['base_uri' => 'http://httpbin.org/']);// 把要发起的请求组织起来
$promises = ['image' => $client->getAsync('/image'),'png'   => $client->getAsync('/image/png'),'jpeg'  => $client->getAsync('/image/jpeg'),'webp'  => $client->getAsync('/image/webp')
];// 等待所求请求完成.
$results = Promise\unwrap($promises);// 如果需要处理每一个请求结果
// function.
echo $results['image']->getHeader('Content-Length');
echo $results['png']->getHeader('Content-Length');

也支持发起异步的一定数量的请求:

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Pool;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;$client = new Client();$requests = function ($total) {$uri = 'http://127.0.0.1:8126/guzzle-server/perf';for ($i = 0; $i < $total; $i++) {yield new Request('GET', $uri);}
};$pool = new Pool($client, $requests(100), ['concurrency' => 5,'fulfilled' => function (Response $response, $index) {// 当请求成功后},'rejected' => function (RequestException $reason, $index) {// 当请求失败后 },
]);// 等待请求完成
$promise = $pool->promise();// 强制结束请求
$promise->wait();

使用guzzle实现简单又易读的代码.

[guzzlehttp/guzzle]使用起来更优雅的HTTP客户端相关推荐

  1. 如何更优雅地对接第三方API

    如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/ ...

  2. 9条消除if...else的锦囊妙计,助你写出更优雅的代码

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 前言 最近在做代码重构,发现了很多代码的烂味道.其他的不多说 ...

  3. 教你如何更优雅的设计Java异常

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:lrwinx https://lrwinx.github.i ...

  4. Effective java 系列之更优雅的关闭资源-try-with-resources

    背景: 在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在 ...

  5. c语言c2182是什么错误,C语言中一种更优雅的异常处理机制

    上一篇文章对C语言中的goto语句进行了较深入的阐述,实际上goto语句是面向过程与面向结构化程序语言中,进行异常处理编程的最原始的支持形式.后来为了更好地.更方便地支持异常处理编程机制,使得程序员在 ...

  6. python写出的程序如何给别人使用-涨姿势!这些小技巧让小白也可以写出更优雅的Python代码!...

    原标题:涨姿势!这些小技巧让小白也可以写出更优雅的Python代码! 一.前言 我前两天回答了两个Python相关的问题,收到了很多赞,从答案被收藏的情况来看,确实对不少人都很有帮助,所以我也很开心. ...

  7. TabLayout让Fragment在ViewPager中的滑动切换更优雅

    TabLayout让Fragment在ViewPager中的滑动切换更优雅 转载于:https://www.cnblogs.com/zhujiabin/p/7382500.html

  8. Python代码如何写的更优雅

    首先最重要的一点, 忘掉其他语言里的写法, 尝试使用Python风格进行code, 熟练之后,你会觉得她真的很美! 1. 多个值进行初始化 # > yes s1,s2,s3 = [],[],0 ...

  9. JavaScript复杂判断的更优雅写法

    前提 我们编写js代码时经常遇到复杂逻辑判断的情况,通常大家可以用if/else或者switch来实现多个条件判断,但这样会有个问题,随着逻辑复杂度的增加,代码中的if/else/switch会变得越 ...

最新文章

  1. android java 给控件设置style,在Android Lollipop for Material Design中为SwitchCompat按钮设置样式/着色...
  2. 修改登录密码html代码,修改密码.html · yuanxing_one/yuanxing - Gitee.com
  3. Python3 函数(方法)
  4. js判断中文字符长度
  5. ZOJ2091(贪心)
  6. SqlHelper数据库操作辅助类
  7. 关于Socket和IOCP的一些值得注意的地方
  8. Python外卷(8)--pdist, squareform
  9. linux cd -目录,linux cd
  10. TCP聊天工具的实现
  11. 关于python的垃圾回收机制_Python中的垃圾回收机制
  12. 最新Keil MDK 5.37下载
  13. c语言:8、makeFile编写
  14. 解决Linux版Vivado下载bit流到FPGA Open target失败问题
  15. 使用PPT画图,取消自动选点(自动吸附点)解决方案
  16. Unity Shader学习(五)鼠标移动方块
  17. 利用Backtrader进行期权回测之五:用backtrader_plotting查看回测结果
  18. android x86 uefi 安装教程,如何在Hyper-V上安装android-x86系统
  19. 微信小程序weui的使用
  20. [木野狐]ViewState 剖析(翻译兼笔记)

热门文章

  1. 2023 年第一弹, Flutter 3.7 发布啦,快来看看有什么新特性
  2. 前端框架的新星-Hyperapp 1.0简介
  3. R语言 PCA 主成分分析
  4. PCA主成分分析实例
  5. 基于STM32的智能小车(一)
  6. java web 整合海康威视录像机摄像 SDK
  7. python 同花顺thstrader_GitHub - skyformat99/THSTrader: 量化交易。同花顺免费模拟炒股软件客户端的python API。(Python3)...
  8. 让爱呼吸|花漾星妈,女神们的欢乐时光
  9. 如何防范抵御APT攻击?
  10. java毕业设计在线视频教育平台Mybatis+系统+数据库+调试部署