[Laravel 扩展包]Fetch PHP:一个轻量级 HTTP 库,类似于 JavaScript's fetch()
Fetch PHP 是一个受 JavaScript fetch 启发的轻量级 HTTP 库,为 PHP HTTP 请求带来了简单性和灵活性。它在后台使用 Guzzle 客户端,通过易于使用的 API 提供同步和异步请求;
我知道 Guzzle 是王者,我会在大多数项目上使用 Laravel 的 HTTP 客户端。然而,当你想要一个简单的 fetch()
函数时,Fetch PHP 包非常有趣:
$response = fetch('https://jsonplaceholder.typicode.com/todos/1');
// Get the JSON response
$data = $response->json(assoc: true);
print_r($data);
/*
[
"userId" => 1,
"id" => 1,
"title" => "delectus aut autem",
"completed" => false
}
*/
// Get the status text (e.g., "OK")
echo $response->statusText();
可用响应方法
- json(bool $assoc = true): 将响应体(body)解码为 JSON。如果
$assoc
为true
,则返回一个关联数组。如果为false
,则返回一个对象。 - text(): 将响应体以普通文本的方式返回。
- blob(): 将响应体作为 PHP 流资源(如 “blob”)返回。
- arrayBuffer(): 将响应体作为二进制字符串返回。
- statusText(): 返回 HTTP 状态文本(e.g., "OK" for 200).
- ok(): 如果状态码在 200-299 之间,则返回
true
。 isInformational()
、isRedirection()
、isClientError()
、isServerError()
: 检测状态范围的辅助函数。
异步请求使用 fetchAsync()
函数,可以按如下方式使用:
//
// Asyc requests
//
$promise = fetchAsync('https://jsonplaceholder.typicode.com/todos/1');
$promise->then(function ($response) {
$data = $response->json();
print_r($data);
});
// Wait for the promise to resolve
$promise->wait();
//
// Error handling
//
$promise = fetchAsync('https://nonexistent-url.com');
$promise->then(function ($response) {
// handle success
}, function ($exception) {
// handle failure
echo "Request failed: " . $exception->getMessage();
});
你还可以将 Guzzle 选项传递给 fetch()
和 fetchAsync()
函数,以获得所需的任何高级 Guzzle 功能。
GitHub 源码:https://github.com/Thavarshan/fetch-php