(图片来源自网络,侵删)
之前编写请求相关的业务逻辑,一直使用 php-curl-class/php-curl-class 这个包,后来由于要引入soap的使用,故而顺带研究了一下 cURL 与 guzzle 的异同,网上查阅资料整理成本篇文章。

当然,适合自己的才是最好,凡事终归是小马过河,下边是正文:

什么是 cURL ?它是使用 URL 传输数据的命令行工具和库,用于在命令行或脚本中传输数据。它也用于汽车,电视机,路由器,打印机,音频设备,移动电话,平板电脑,并且是数千种每天影响着数十亿人的软件应用程序的互联网传输骨干网。

什么是 Guzzle ? 它是一个 PHP HTTP 客户端,可以轻松发送 HTTP 请求,并轻松与 Web 服务集成。 Guzzle 是一个 PHP HTTP 客户端,可以轻松发送 HTTP 请求,并且可以轻松地与 Web 服务集成。

cURL 可以归类为“文件传输”类别中的工具,而 Guzzle 则归类于“微框架(后端)”下。

cURL 和 Guzzle 都是开源工具,在 GitHub上, Guzzle 似乎比 cURL 更受欢迎。

PHP/cURL 的局限性

我们不得不承认,说下边这些是 PHP/cURL 的局限性,这似乎有些误导。我们通过将 PHP/cURL 直接与 Guzzle 的优势进行比较来解释 PHP/cURL 的局限性的说法。如果您正在构建一个简单的脚本,而只需要几行 PHP/cURL 代码就可以进行 HTTP 调用,那么您就不必担心测试和代码质量。使用 PHP/cURL 完全可以。实际上,只要您感到合适就可以继续使用 PHP/cURL。 PHP / cURL没有真正的技术限制。因此,有了这个免责声明,我们继续。

下边列出几个使用 PHP/cURL 时的局限性:

  • 由于 PHP/cURL 使用 libcurl,而 libcurl 使用curl。这是安装命令行工具 curl 的必要条件。如果使用共享主机,则可能没有安装软件包的权限。
  • PHP/cURL 提供了一系列使用 curl 的选项,如其官方文档所示。一方面,它很好,因为它提供了很大的灵活性。另一方面,它太冗长而无法使用。它没有提供最令人愉快的API。
  • 如果使用的是 PHP/cURL ,则单元测试会很麻烦。没有对单元测试的现成支持。

Guzzle 简介

以下是Guzzle官方网站上的官方说明:

Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services.

让我们看看Guzzle如何克服我们先前所说的 PHP/cURL的那些局限性。

  首先, Guzzle 是 HTTP 请求的抽象层。它对PHP/cURL,PHP流,套接字或非阻塞事件循环没有硬性依赖。它封装了底层的 HTTP 传输。如果需要,可以使用PHP/cURL,但这不是必须的。因此,在共享托管环境中,如果PHP/cURL不可行,则可以使用其他替代方法。

  其次,Guzzle 提供了非常干净的 API 来使用。在使用库时,文档非常重要。Guzzle 通过提供全面的文档来做得很好。从技术上讲,Guzzle 用面向对象的编程编写得很好,它使用 PSR-7 作为 HTTP 接口。这意味着它可以与任何其他库兼容,只要它们与 PSR-7 接口兼容即可。

  最后,Guzzle 具有内置的单元测试支持。它提供了一种比较简单的方法来模拟 HTTP 层。查看其文档以获取更多详细信息。

使用 Guzzle

使用Composer安装Guzzle。 在撰写本文时,Guzzle的最新版本是 6.0 。

composer require guzzlehttp/guzzle:~6.0

创建一个入口文件 index.php 并包含 Composer 自动加载文件。 同时,我们将导入Guzzle类:

<?phprequire 'vendor/autoload.php';use GuzzleHttp\Client;

使用 Google 的根 URL 实例化 Guzzle 客户端对象:

$client = new Client(['base_uri' => 'http://www.google.com',
]);

向 Google 的搜索 URI 发出 GET 请求。同时,我们传递查询参数 q

$response = $client->request('GET', 'search', ['query' => ['q' => 'curl']
]);

最后,我们将输出响应数据:

echo $response->getBody();

完整的代码如下所示:

<?phprequire 'vendor/autoload.php';use GuzzleHttp\Client;$client = new Client(['base_uri' => 'http://www.google.com',
]);$response = $client->request('GET', 'search', ['query' => ['q' => 'curl']
]);echo $response->getBody();

如您所见,由于 Guzzle 可靠的 OOP 设计,上面的代码几乎是不言自明的。

最后

本文参考了:

  1. From PHP/cURL to Guzzle
  2. cURL vs Guzzle

cURL 与 Guzzle 的对比与选用相关推荐

  1. php下curl与file_get_contents性能对比

    为什么80%的码农都做不了架构师?>>>    上一篇讲了 <php使用curl替代file_get_contents>, 后续贴出了curl和file_get_cont ...

  2. 轻松掌控全链路服务监控:方案概述与对比 | 真的很干!

    点击上方"搜云库技术团队",选择"设为星标" 回复"1024"或"面试题"获取4T学习资料 0 - 问题背景 随着微服务 ...

  3. curl wget之间的区别 以及推荐SimpRead插件

    curl & wget之间的区别 以及推荐SimpRead插件 参考 技术|cURL 与 wget:你应该选用哪一个? 前言 在归纳这两者之间的区别之前,还是想推荐一下google chrom ...

  4. 轻松掌控全链路监控:方案概述与对比 | 真的很干!

    点击上方"朱小厮的博客",选择"设为星标" 回复"资料"获取新整理的1TB资料 来源:http://uee.me/ba8Mw 0 - 问题背 ...

  5. curl和file_get_contents 区别以及各自的优劣

    PHP中fopen,file_get_contents,curl函数的区别: 1.fopen /file_get_contents 每次请求都会重新做DNS查询,并不对 DNS信息进行缓存.但是CUR ...

  6. 瑞芯微RK2918、全志A10和AML8726-M3方案ICS系统运行效果对比

    为什么80%的码农都做不了架构师?>>>    6月12日注:由于对比时AML8726-M3方案的专用Flash插件还未出现,所以下文中关于网页应用和在线视频能力方面的对比不作为参考 ...

  7. 论文阅读《Representation learning with contrastive predictive coding 》(CPC)对比预测编码

    论文地址:Representation Learning with Contrastive Predictive Coding 目录 一.Background(背景) 二.Motivation and ...

  8. 五大APP安全在线检测平台对比

    五大APP安全在线检测平台对比 时间  2017-10-31 标签 APP自动化检测 Android安全 移动安全 ios安全 栏目 系统安全 原文   http://1425831735.blog. ...

  9. 实现全链路监控平台很难吗?Pinpoint、SkyWalking、Zipkin 选型对比

    随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了 ...

最新文章

  1. ubuntu16.04 彻底卸载MySQL
  2. python多进程存储数据_[b0035] python 归纳 (二十)_多进程数据共享和同步_共享内存Value Array...
  3. 带你学python基础:字符串
  4. Winform中使用FastReport的DesignReport时怎样给通过代码Table添加数据
  5. django中的ajax_post请求
  6. Hibernate---架构
  7. EXCEL表格转换成json数据工具
  8. ubuntu mysql主从备份_Ubuntu 16 MySQL主从备份配置
  9. 腾讯,开源了,高性能 RPC 框架,是要干DUBBO 吗?
  10. 笔记——数据归一化 scikit-learn中的Scaler
  11. python批量读取txt数据并写入csv
  12. 银行核心操作系统as400 rs6000
  13. 我是一个*** (二)
  14. 小米 2022校招 java后端一面凉经(55min)
  15. 静息态功能磁共振及其在精神疾病诊断中的应用
  16. 使用echarts中国地图添加气泡时使用接口访问的数据不显示
  17. 直播、点播系统开发项目总结(本地视频、抓包视频、直播推流、网络直播、平台搭建等相关问题点记录)
  18. 搜狗推出明医搜索,您怎么看?
  19. 骁龙778g和天玑810哪个好 骁龙778g和天玑810差别有多大
  20. Java高级工程师进阶学习,快来收藏!

热门文章

  1. 第七十一章 SQL命令 SELECT(三)
  2. 【目标检测-YOLO】YOLO v5 训练最好结果的技巧
  3. CentOS 7.8 remove JDK
  4. 西门子SIMATIC S7-200 SMART木工机械的应用
  5. 数字化和网络化双重驱动下 周界安防产品迎来新变革
  6. 如何从零开始写小程序
  7. table表格详细介绍
  8. sql语句中查重复数据
  9. java基于springboot英语学习网站
  10. 5.7学习计划 减肥——健康瘦身调理ppt制作