utopia-php/fetch

一个简单的库,为发送HTTP请求提供接口。

0.2.1 2024-03-18 11:50 UTC

This package is auto-updated.

Last update: 2024-09-18 13:22:17 UTC


README

轻量级且快速的PHP微库,为PHP应用程序中执行HTTP请求提供便捷和灵活的方式。

用法

创建一个Client类的实例来执行HTTP请求。实例方法允许设置请求选项,如头部、超时、连接超时等。

Client实例上的fetch()方法接受以下参数

  • url - 一个包含要发送请求的URL的字符串。
  • method - 一个包含请求HTTP方法的字符串。默认方法为GET
  • body - 一个用于请求正文的数组,可以是表单数据或JSON字符串。
  • query - 一个查询参数的关联数组。

fetch()返回的Response对象提供了几个方法来检查响应

  • isOk() - 检查响应状态码是否在200-299范围内。
  • getBody() - 获取响应正文作为字符串。
  • getHeaders() - 获取响应头部作为关联数组。
  • getStatusCode() - 获取响应状态码。
  • json() - 将响应正文解码为一个关联数组。
  • text() - getBody()的别名,返回响应正文作为字符串。
  • blob() - 返回响应正文作为blob。

示例

GET请求

require_once __DIR__ . '/vendor/autoload.php';
use Utopia\Fetch\Client;

$client = new Client();
$url = 'https://httpbin.org/get';
$method = 'GET';
$query = ['foo' => 'bar'];

// Optionally set more configurations
$client
  ->setUserAgent('CustomUserAgent/1.0')
  ->setAllowRedirects(true)
  ->setMaxRedirects(1)
  ->setConnectionTimeout(10)
  ->setTimeout(30);

$resp = $client->fetch(
    url: $url,
    method: $method,
    query: $query
);

if ($resp->isOk()) {
    echo "Status Code: " . $resp->getStatusCode() . "\n";
    echo "Response Headers:\n";
    print_r($resp->getHeaders());
    echo "Response Body:\n";
    echo $resp->getBody();
} else {
    echo "Error: " . $resp->getStatusCode() . "\n";
}

POST请求

require_once __DIR__ . '/vendor/autoload.php';
use Utopia\Fetch\Client;

$client = new Client();
$url = 'https://httpbin.org/post';
$method = 'POST';
$headers = ['Content-Type' => 'application/json'];
$body = ['name' => 'John Doe'];
$query = ['foo' => 'bar'];

// Set request headers
$client->addHeader('Content-Type', 'application/json');

$resp = $client->fetch(
    url: $url,
    method: $method,
    body: $body,
    query: $query
);

print_r($resp->json());

发送文件

require_once __DIR__ . '/vendor/autoload.php';
use Utopia\Fetch\Client;

$client = new Client();
$url = 'http://localhost:8000/upload';
$method = 'POST';

// Ensure you set the appropriate Content-Type for file upload
$client->addHeader('Content-Type', 'multipart/form-data');

$filePath = realpath(__DIR__ . '/tests/resources/logo.png'); // Absolute path to the file
$body = ['file' => new \CURLFile($filePath, 'image/png', 'logo.png')];

$resp = $client->fetch(
    url: $url,
    method: $method,
    body: $body
);

print_r($resp->json());