amphp/http-client-psr7

Amp HTTP 客户端的 PSR-7 适配器。

资助包维护!
amphp

v1.1.0 2024-09-04 00:17 UTC

This package is auto-updated.

Last update: 2024-09-04 00:27:45 UTC


README

AMPHP 是一个为 PHP 设计的事件驱动库集合,考虑到纤维和并发。本包提供 PSR-7 适配器和 PSR-18 客户端作为 amphp/http-client 的插件。

Latest Release MIT License

安装

此包可以作为 Composer 依赖项安装。

composer require amphp/http-client-psr7

要求

  • PHP 8.1+

使用方法

创建 Amp\Http\Client\Psr7\PsrAdapter 实例以在本地 Amp 和 PSR-7 格式之间转换客户端请求和响应。适配器不依赖于任何具体的 PSR-7 实现,因此需要 PSR-17 工厂接口来创建 PSR-7 请求和响应。

使用 Amp\Http\Client\Psr7\PsrHttpClient 作为 PSR-18ClientInterface 的直接实现。

<?php

require 'vendor/autoload.php';

use Amp\Http\Client\HttpClientBuilder;
use Amp\Http\Client\Psr7\PsrAdapter;
use Amp\Http\Client\Psr7\PsrHttpClient;
use Laminas\Diactoros\RequestFactory;
use Laminas\Diactoros\ResponseFactory;

// Note the laminas/laminas-diactoros library is used only as an example.
// You can use any library providing an implementation of PSR-17.

// PSR-17 request factory
$psrRequestFactory = new RequestFactory();
// PSR-17 response factory
$psrResponseFactory = new ResponseFactory();

$psrAdapter = new PsrAdapter($psrRequestFactory, $psrResponseFactory);

$ampHttpClient = HttpClientBuilder::buildDefault();
$psrHttpClient = new PsrHttpClient($ampHttpClient, $psrAdapter);

$request = $psrRequestFactory->createRequest('GET', 'https://google.com');

// $response is a PSR-7 ResponseInterface instance.
$response = $psrHttpClient->sendRequest($request);

Amp 和 PSR-7 实现之间存在一些不兼容性,可能需要特殊处理。

  • PSR-7 请求仅包含一个协议版本,但 Amp 请求可以包含多个版本。在这种情况下,适配器会检查协议版本列表是否包含当前 PSR-7 实现的默认版本,否则会抛出异常。您也可以使用 toPsrRequest() 方法的可选参数显式设置协议版本。
  • Amp 响应包含对 Request 实例的引用,但 PSR-7 响应不包含;因此您需要显式提供请求实例。

示例

更详细的代码示例位于 examples 目录中。

版本控制

amphp/http-client-psr7 遵循与其他所有 amphp 包一样 semver 语义版本规范。

安全

如果您发现任何安全相关的问题,请使用私人安全问题报告者,而不是使用公共问题跟踪器。

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 LICENSE