PHP - 为什么使用Guzzle而不是cURL?

Cat*_*nor 52 php curl laravel guzzle

在我的应用程序中,我最初开始使用cURL从各种API中检索数据.今天,我尝试使用Guzzle来完成同样的任务.到目前为止,cURL和Guzzle似乎同样有效.

Github来看,很多人似乎都喜欢Guzzle,但我并不真正理解为什么.

我的问题:

对于我的情况(从各种API检索数据),是否更喜欢使用Guzzle?如果我使用cURL代替Guzzle(反之亦然),我最终会后悔吗?

我正在使用PHP/Laravel.

Fab*_*nes 77

为什么要用Guzzle?

首先,Guzzle是http请求的抽象层,虽然它默认使用cURL,但您可以使用任何其他所需的http客户端:

Guzzle需要cURL吗?

不可以.Guzzle可以使用任何HTTP处理程序来发送请求.这意味着Guzzle可以与cURL,PHP的流包装器,套接字和非阻塞库(如React)一起使用.您只需要配置HTTP处理程序以使用不同的发送请求的方法

注意: Guzzle历史上只使用cURL发送HTTP请求.cURL是一个了不起的HTTP客户端(可以说是最好的),Guzzle会在可用时默认继续使用它.这种情况很少见,但有些开发人员没有在他们的系统上安装cURL或遇到特定版本的问题.通过允许可交换的HTTP处理程序,Guzzle现在可以更加自定义,并且能够适应更多开发人员的需求.

由于您使用的是Laravel,如果您有任何机会使用任何电子邮件API,那么现在您已经安装了Guzzle.在Laravel的composer.json上你可以看到一个建议:

"suggest": {
    ...
    "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~5.3|~6.0).",
    ...
}
Run Code Online (Sandbox Code Playgroud)

另一个原因是重用代码,看一下bogdan所做的评论,用cURL做一个简单的http请求所需的代码量.使用Guzzle更简单,更清晰,可读和可重用.很容易创建一个封装你的Http请求的服务.

Guzzle还允许您以与使用promises的javascript非常类似的方式执行异步请求.

最后但并非最不重要的,测试!对您的API进行测试或为您的应用创建单元测试并使用Guzzle模拟http请求比使用cURL更容易.关于测试更多信息点击这里

但是,如果你只想做几个简单的http请求(似乎不是这种情况)你不关心测试,你不想依赖Guzzle去cURL.

  • 谢谢.你完全相信我应该使用Guzzle. (4认同)

Dev*_*key 5

Guzzle是HTTP传输的抽象层,碰巧在可用的地方使用cURL。

除了上述内容外,尽管您可以使用cURL自己做所有事情,但Guzzle大大简化了事情,尤其是在调试方面。


Hay*_*den 5

Guzzle 之于 cURL 就像 axios 之于 XMLHttpRequest。