了解 Laravel HTTP 客户端

最后更新于 作者:

Getting to Know the Laravel HTTP Client image

Laravel 有一个 HTTP 客户端,它提供了一个围绕流行的 Guzzle HTTP 客户端的最小 API。如果您错过了这个消息,让我们一起了解这个新客户端的一些基础知识和功能。

Guzzle 是一个功能强大的 HTTP 客户端,但对于 80% 的用例来说,当尝试进行简单的 HTTP GET 或从 JSON API 获取数据时,它显得过于复杂。

突出功能

总的来说,以下是我最喜欢的 Laravel Http 客户端提供的功能

  • 可链接的请求设置
  • 轻松访问 JSON 响应数据
  • 无需任何样板代码即可进行简单的请求
  • 重试失败的请求
  • 围绕身份验证标头(基本、摘要、承载)的便捷方法
  • 测试模拟和测试检查

对于更复杂的 HTTP 客户端工作,您可能需要直接使用 Guzzle,但我相信 Laravel HTTP 已经包含了您大多数项目所需的一切。

基本用法

以下是使用 Laravel 的 HTTP 客户端可以预期的最基本用法

use Illuminate\Support\Facades\Http;
 
$response = Http::get('https://laravel.net.cn');
 
// Get the response body
$response->body();
 
$response = Http::get( 'https://api.github.com/users/paulredmond/gists' );
 
// Array of data from the JSON response
$data = $response->json();

访问数据

您可以通过几种方式访问 JSON 响应中的数据:json() 方法和 ArrayAccess

// Access the response data via `json()`
$data = $response->json();
$data['username'];
 
// Array access from the Response object
Http::get( 'https://api.github.com/users/paulredmond/gists' )['username'];
 
// Return the response object and access directly
$response = Http::get('...');
$response['username'];

错误处理

使用 Guzzle 时,让人困惑和复杂的一点是,您必须不断地将调用包装在 try/catch 块中,或者在每个项目中创建一个迷你抽象来为您处理这些问题。

Laravel 会捕获 400500 级别的响应,并提供您可以用来确定在响应期间是否发生了任何错误的方法

$response = Http::get( 'https://api.github.com/users/paulredmond/gists' );
 
// Boolean checks on the response
$response->ok() : bool;
$response->clientError(): bool;
$response->successful() : bool;
$response->serverError() : bool;
$response->clientError() : bool;

超时

在了解 Laravel 处理客户端和服务器异常后,我最初并没有意识到超时 *将* 导致异常。默认超时时间相当长;但是,Laravel HTTP 允许您使用便捷的 timeout() 方法自行定义超时时间(以秒为单位)

$response = Http::timeout(5)
->get( 'https://ffdsafdsafdsafas.com' );
 
// Illuminate\Http\Client\ConnectionException:
// cURL error 28: Connection timed out after 5005 milliseconds

了解更多

查看我们关于 使用 Laravel HTTP 客户端的 5 个技巧和窍门 的教程以及 Laravel 7 HTTP 客户端文档。我还建议您查看 Illuminate/Http 中的类,它是一个相当简单、优雅的 API,使用起来很直观。

Paul Redmond photo

Laravel 新闻的专栏作家。全栈 Web 开发人员和作家。

归类于
Cube

Laravel 新闻简报

加入 40,000 多名其他开发人员,永不错过新的技巧、教程等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动完成功能和对本地和生产环境的即时反馈进行微调。

Tinkerwell
No Compromises logo

不妥协

Joel 和 Aaron,来自不妥协播客的两名经验丰富的开发者,现在可以为您的 Laravel 项目雇用。 ⬧ 固定费用为每月 7500 美元。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100% 退款保证。

不妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,以确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

正在运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,使您的应用程序保持新鲜。

Shift
Bacancy logo

Bacancy

只需每月 2500 美元,即可为您的项目配备一名具有 4-6 年经验的资深 Laravel 开发人员。获得 160 小时的专人专业知识和 15 天的无风险试用。立即预约电话!

Bacancy
Lucky Media logo

Lucky Media

立即获得好运 - Laravel 开发的理想选择,拥有超过十年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar:Laravel 电子商务

Laravel 的电子商务。一个开源软件包,将现代无头电子商务功能的强大功能带到 Laravel。

Lunar:Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 职位招聘网站

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit:Laravel SaaS 启动工具包

SaaSykit 是一个 Laravel SaaS 启动工具包,包含运行现代 SaaS 所需的所有功能。支付、精美结账、管理面板、用户仪表板、身份验证、就绪组件、统计信息、博客、文档等。

SaaSykit:Laravel SaaS 启动工具包
Rector logo

Rector

您无缝 Laravel 升级、降低成本和加快创新以帮助成功企业的合作伙伴

Rector
MongoDB logo

MongoDB

通过 MongoDB 和 Laravel 的强大集成增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务性、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。了解 MongoDB 的灵活、现代数据库如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的零依赖性输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel 提示构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 软件包为您的 Laravel 应用程序添加评论

阅读文章