utopia-php / fetch
一个简单的库,为发送HTTP请求提供接口。
0.2.1
2024-03-18 11:50 UTC
Requires
- php: >=8.0
Requires (Dev)
- laravel/pint: ^1.5.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.5
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());