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

2022-08-30 08:41:52

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

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

我的问题:

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

我正在使用PHP / Laravel。


答案 1

为什么使用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).",
    ...
}

另一个原因是重用代码,看看bogdan的评论,即使用cURL执行简单的http请求所需的代码量。使用Guzzle更简单,更干净,可读性和可重用性。创建一个将封装您的 Http 请求的服务非常容易。

Guzzle还允许您执行异步请求,其方式与使用 promise 的 javascript 非常相似。

最后但并非最不重要的一点是,测试!与使用 cURL 相比,对 API 进行测试或为应用创建单元测试并使用 Guzzle 模拟 http 请求要容易得多。有关测试的更多信息,请单击此处

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


答案 2

Guzzle 是 cURL,就像 axios 是 XMLHttpRequest 一样。


推荐