Laravel 7 新功能 HTTP 客户端入门

Laravel

Laravel 7 有一个新的 HTTP 客户端,它为流行的 Guzzle HTTP 客户端提供了最轻简的 API。 如果你错过了新闻,让我们来回顾一些基础知识。 你可以在 Laravel 7 HTTP 客户端文档 中找到所有需要知道的信息,但是让我们先粗略地看一下其中的一些特性。

Guzzle 是一个强大的 HTTP 客户端,但是当试图创建一个简单的 HTTP GET 或从 JSON API 获取数据时,80% 的用例看起来很复杂。

突出特点

浏览一下,这里是我最喜欢的 Laravel Http 客户端提供的功能:

  • 可链式请求设置
  • 易于访问 JSON 响应数据
  • 不用模板设置就能发起一个简单的请求
  • 重试失败的请求
  • 围绕身份验证头 (basic, digest, bearer) 的方便方法
  • 虚拟请求以及检查请求

对于更复杂的 HTTP 客户端工作,你可能得直接使用 Guzzle,但我认为 Laravel HTTP 拥有大多数项目所需的一切。

基本用法

使用 Laravel 的 HTTP 客户端,你可能会用到下面这些最基本的用法::

use Illuminate\Support\Facades\Http;

$response = Http::get('https://laravel.com');

// 获取响应体
$response->body();

$response = Http::get( 'https://api.github.com/users/paulredmond/gists' );

// 从 JSON 响应获取数组数据
$data = $response->json();

访问数据

有几种方法可以从 JSON 响应中访问数据: json()ArrayAccess方法:

// 通过 `json()` 访问响应数据
$data = $response->json();
$data['username']; 

// 通过 Response 对象访问数据
Http::get( 'https://api.github.com/users/paulredmond/gists' )['username'];

// 返回响应对象然后直接访问
$response = Http::get('...');
$response['username'];

错误处理

有一件事情可能会使 Guzzle 变得令人迷惑和复杂,那就是不断地在 try/catch 块中包装调用,或者在每个项目上创建一个小型的抽象来处理这个问题。

Laravel 捕获了400500响应,并提供了一些方法来确定在响应过程中是否发生了任何不好的事情:

$response = Http::get( 'https://api.github.com/users/paulredmond/gists' );

// 响应上的布尔值检验
$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 7 HTTP 客户端文档 了解到大部分你所需要了解的。 我也建议你查看 Illuminate/Http 的类——它是一个相当简单、优雅的 API,使用起来很直观。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/laravel-http-cl...

译文地址:https://learnku.com/laravel/t/42005

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!