Laravel 7 新功能 HTTP 客户端入门
Posted PHP开源Hub
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 7 新功能 HTTP 客户端入门相关的知识,希望对你有一定的参考价值。
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 捕获了400
和500
响应,并提供了一些方法来确定在响应过程中是否发生了任何不好的事情:
$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,使用起来很直观。
以上是关于Laravel 7 新功能 HTTP 客户端入门的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel Lighthouse 在 Laravel 7 中出现 CORS 错误
Laravel 5 系列入门教程最适合中国人的 Laravel 教程
homestead的laravel项目错误:Use of undefined constant JSON_INVALID_UTF8_SUBSTITUTE - assumed ‘JSON_INVAL(代