YurunHttp v3.4.0 发布,支持 Http2 全双工通信

YurunHttp 是开源的 PHP HTTP 类库,支持链式操作,简单易用。

支持所有常见的 GET、POST、PUT、DELETE、UPDATE 等请求方式,支持 Http2、WebSocket、浏览器级别 Cookies 管理、上传下载、设置和读取 header、Cookie、请求参数、失败重试、限速、代理、证书等。

git 仓库中 examples 目录里是示例代码!

更新日志(v3.4.0):

新增

  • 新增支持全双工的 Http2 客户端

  • 新增 Attributes 属性的常量定义类,所有 Attribute 操作使用该类中的常量作为名称

  • Swoole Handler 引入连接管理器

  • 新增默认缺省的默认 UserAgent (可在每个请求中指定,或设置全局 Attribute::USER_AGENT 用以代替默认的 UA)

  • 支持发送 Http2 请求不调用 recv()

优化

  • Request对象中的Attribute缺省情况下,会从YurunHttp类中获取

  • 重构 Swoole Handler

Http2 全双工用法

该用法仅支持 Swoole

$uri = new Uri('https://wiki.swoole.com/');

// 客户端初始化和连接
$client = new \Yurun\Util\YurunHttp\Http2\SwooleClient($uri->getHost(), Uri::getServerPort($uri), 'https' === $uri->getScheme());
$client->connect();

// 请求构建
$httpRequest = new HttpRequest;
$request = $httpRequest->header('aaa', 'bbb')->buildRequest($uri, [
    'date'  =>  $i,
], 'POST', 'json');

for($i = 0; $i < 10; ++$i)
{
    go(function() use($client, $request){
        // 发送(支持在多个协程执行)
        $streamId = $client->send($request);
        var_dump('send:' . $streamId);

        // 接收(支持在多个协程执行)
        $response = $client->recv($streamId, 3);
        $content = $response->body();
        var_dump($response);
    });
}

具体用法请看 examples/http2Client.php

重大版本更新日志

每个小版本的更新日志请移步到 Release 查看

v3.4.0 新增支持 Http2 全双工用法

v3.3.0 新增支持 Http2 兼容用法

v3.2.0 新增支持 Swoole WebSocket 客户端

v3.1.0 引入浏览器级别 Cookies 管理

v3.0.0 新增支持 Swoole 协程

v2.0.0 黑历史,不告诉你

v1.3.1 支持 Composer

v1.0-1.3 初期版本迭代

Composer

本项目可以使用composer安装,遵循psr-4自动加载规则,在你的 composer.json 中加入下面的内容

{
    "require": {
        "yurunsoft/yurun-http": "^3.4.0"
    }
}

然后执行 composer update 安装。

之后你便可以使用 include "vendor/autoload.php"; 来自动加载类。(ps:不要忘了namespace)

用法

简单调用

<?php
use Yurun\Util\HttpRequest;

$http = new HttpRequest;
$response = $http->ua('YurunHttp')
                 ->get('http://www.baidu.com');

echo 'html:', PHP_EOL, $response->body();

PSR-7 请求构建

<?php
use Yurun\Util\YurunHttp\Http\Request;
use Yurun\Util\YurunHttp;

$url = 'http://www.baidu.com';

// 构造方法定义:__construct($uri = null, array $headers = [], $body = '', $method = RequestMethod::GET, $version = '1.1', array $server = [], array $cookies = [], array $files = [])
$request = new Request($url);

// 发送请求并获取结果
$response = YurunHttp::send($request);

var_dump($response);

Swoole 协程模式

<?php
use Yurun\Util\YurunHttp;
use Yurun\Util\HttpRequest;

// 设置默认请求处理器为 Swoole
YurunHttp::setDefaultHandler('Yurun\Util\YurunHttp\Handler\Swoole'); // php 5.4
// YurunHttp::setDefaultHandler(\Yurun\Util\YurunHttp\Handler\Swoole::class); // php 5.5+

// Swoole 处理器必须在协程中调用
go('test');

function test()
{
    $http = new HttpRequest;
    $response = $http->get('http://www.baidu.com');
    echo 'html:', PHP_EOL, $response->body();
}

WebSocket Client

YurunHttp::setDefaultHandler(\Yurun\Util\YurunHttp\Handler\Swoole::class);
go(function(){
    $url = 'ws://127.0.0.1:1234/';
    $http = new HttpRequest;
    $client = $http->websocket($url);
    if(!$client->isConnected())
    {
        throw new \RuntimeException('Connect failed');
    }
    $client->send('data');
    $recv = $client->recv();
    var_dump('recv:', $recv);
    $client->close();
});

具体详见examples目录中的示例代码

相关地址:

猜你喜欢

转载自www.oschina.net/news/111711/yurunhttp-3-4-0-released