编程

[Laravel 扩展包]Fetch PHP:一个轻量级 HTTP 库,类似于 JavaScript 的 fetch()

377 2024-11-10 18:00:00

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。如果 $assoctrue,则返回一个关联数组。如果为 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