在我的应用程序中,我最初开始使用 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 相比,使用 Guzzle 对 API 进行测试或为应用程序创建单元测试并模拟 http 请求要容易得多。有关测试的更多信息这里
但是如果你只想做只有几个简单的http请求(似乎并非如此),你不关心测试并且不想依赖Guzzle go用于 cURL。
Guzzle 之于 cURL 就像 axios 之于 XMLHttpRequest。
Guzzle 是 HTTP 传输的抽象层,它恰好在可用的情况下使用 cURL。
除了上述之外,虽然您可以使用 cURL 自己完成所有事情,但 Guzzle 极大地简化了事情,特别是在调试方面。