了解 Laravel HTTP 客户端
最后更新于 作者: Paul Redmond
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 objectHttp::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 会捕获 400
和 500
级别的响应,并提供您可以用来确定在响应期间是否发生了任何错误的方法
$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,使用起来很直观。