PHP - 为什么使用Guzzle而不是cURL?
在我的应用程序中,我最初开始使用cURL从各种API中检索数据。今天,我尝试使用Guzzle来完成相同的任务。到目前为止,cURL和Guzzle似乎都同样有效。
从Github来看,很多人似乎都喜欢Guzzle,但我并不真正理解为什么。
我的问题:
对于我的情况(从各种API中检索数据),使用Guzzle是否更可取?如果我使用cURL而不是Guzzle(反之亦然),我最终会后悔吗?
我正在使用PHP / Laravel。
在我的应用程序中,我最初开始使用cURL从各种API中检索数据。今天,我尝试使用Guzzle来完成相同的任务。到目前为止,cURL和Guzzle似乎都同样有效。
从Github来看,很多人似乎都喜欢Guzzle,但我并不真正理解为什么。
我的问题:
对于我的情况(从各种API中检索数据),使用Guzzle是否更可取?如果我使用cURL而不是Guzzle(反之亦然),我最终会后悔吗?
我正在使用PHP / Laravel。
为什么使用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。
Guzzle 是 cURL,就像 axios 是 XMLHttpRequest 一样。