berlioz/http-client

Berlioz HTTP 客户端是一个PHP库,用于请求具有连续导航的HTTP服务器,包括cookies、session等... 实现了PSR-18(HTTP客户端)、PSR-7(HTTP消息接口)和PSR-17(HTTP工厂)标准。

v2.1.0 2024-04-19 07:33 UTC

README

Latest Version Software license Build Status Quality Grade Total Downloads

Berlioz HTTP 客户端是一个PHP库,用于请求具有连续导航的HTTP服务器,包括cookies、session等... 实现了PSR-18(HTTP客户端)、PSR-7(HTTP消息接口)和PSR-17(HTTP工厂)标准。

安装

Composer

您可以使用Composer安装Berlioz HTTP 客户端,这是推荐的方式。

$ composer require berlioz/http-client

依赖项

  • PHP ^8.0
  • PHP库
    • curl
    • mbstring
    • zlib
    • berlioz/http-message
    • elgigi/har-parser
    • psr/http-client
    • psr/log

用法

请求

使用 RequestInterface

您可以使用实现RequestInterface接口(PSR-7)的请求对象来构建自己的请求对象。

use Berlioz\Http\Client\Client;
use Berlioz\Http\Message\Request;

/** @var \Psr\Http\Message\RequestInterface $request */
$request = new Request(...);

$client = new Client();
$response = $client->sendRequest($request);

print $response->getBody();

Get/Post/Patch/Put/Delete/Options/Head/Connect/Trace

方法可用于使用定义的HTTP方法进行请求

  • Client::get(...)
  • Client::post(...)
  • Client::patch(...)
  • Client::put(...)
  • Client::delete(...)
  • Client::options(...)
  • Client::head(...)
  • Client::connect(...)
  • Client::trace(...)

使用Client::get()的示例

use Berlioz\Http\Client\Client;

$client = new Client();
$response = $client->get('https://getberlioz.com');

print $response->getBody();

您还可以将HTTP方法作为参数传递给Client::request(...)方法

use Berlioz\Http\Client\Client;

$client = new Client();
$response = $client->request('get', 'https://getberlioz.com');

print $response->getBody();

每个方法都接受一个包含$options参数的选项数组。选项列表

  • baseUri(字符串):如果请求中没有提供,则为URI的基
  • followLocation(布尔值):跟随重定向(默认:true)
  • followLocationLimit(整数):限制要跟随的位置
  • sleepTime(整数):请求之间的睡眠时间(毫秒)(默认:0)
  • logFile(字符串):日志文件名(仅文件名,不是路径)
  • exceptions(布尔值):错误时抛出异常(默认:true)
  • cookies(null|false|CookiesManager):NULL:使用默认cookie管理器;FALSE:不使用cookies;要使用的CookieManager对象
  • callback(可调用):请求后的回调
  • headers(数组):默认头信息

传递给参数的选项将替换客户端的默认选项。

会话

会话可以通过方法Client::getSession()访问。

历史记录

浏览历史记录保存在会话中。如果序列化对象Session,则历史记录将保留。

方法Session::getHistory()返回一个History对象

use Berlioz\Http\Client\Client;

$client = new Client();
$history = $client->getSession()->getHistory();

Cookies

有一个cookie管理器可用于管理会话和请求之间的cookies。该管理器通过Session::getCookies()方法提供。

如果序列化对象Session,则cookies将保留。

HAR文件

会话的HAR文件可以通过方法Session::getHar()访问。

如果序列化对象Session,则HAR将保留。

请参阅elgigi/har-parser库的文档:https://github.com/ElGigi/HarParser

适配器

用法

库默认使用的适配器是CurlAdapter(如果安装了CURL扩展),否则使用StreamAdapter

您可以通过客户端构造函数的adapter参数指定适配器

use Berlioz\Http\Client\Client;
use Berlioz\Http\Client\Adapter;

$client = new Client(adapter: new Adapter\CurlAdapter(), adapter: new Adapter\StreamAdapter());

第一个指定的适配器是默认适配器。

如果您想强制对请求使用一个适配器,可以在请求选项中传递其名称

use Berlioz\Http\Client\Client;
use Berlioz\Http\Client\Adapter;

$client = new Client(adapter: new Adapter\CurlAdapter(), adapter: new Adapter\StreamAdapter());
$client->get('https://getberlioz.com', options: ['adapter' => 'stream']);

列表

适配器列表

  • curlBerlioz\Http\Client\Adapter\CurlAdapter
  • : Berlioz\Http\Client\Adapter\StreamAdapter
  • Har: Berlioz\Http\Client\Adapter\HarAdapter

HarAdapter

HarAdapter专门用于模拟导航,例如从桌面浏览器等来源。

这对于单元测试非常有用。您只需将清理后的HAR文件存储到您的存储库中,即可启动带有模拟HTTP对话的测试。

use Berlioz\Http\Client\Client;
use Berlioz\Http\Client\Adapter\HarAdapter;
use ElGigi\HarParser\Parser;

// Create HAR object from library `elgigi/har-parser`
$har = (new Parser())->parse('/path/of/my/file.har', contentIsFile: true);

$client = new Client(adapter: new HarAdapter(har: $har));
$client->get('https://getberlioz.com'); // Get response from HAR object, without making an HTTP request

Har适配器接受一个名为strict的选项(默认:false),以强制导航方式。

创建适配器

您可以为您的项目创建一个适配器。您必须实现Berlioz\Http\Client\Adapter\AdapterInterface接口。