• Stars
    star
    257
  • Rank 155,653 (Top 4 %)
  • Language
    PHP
  • License
    MIT License
  • Created about 7 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

YurunHttp 是开源的 PHP HTTP 客户端,支持链式操作,简单易用。完美支持Curl、Swoole 协程。QQ群:17916227

YurunHttp

Latest Version GitHub Workflow Status (branch) Php Version IMI Doc IMI License

简介

YurunHttp,支持智能识别 Curl/Swoole 场景的高性能 Http Client。

支持链式操作,简单易用。支持并发批量请求、HTTP2、WebSocket 全双工通信协议。

非常适合用于开发通用 SDK 包,不必再为 Swoole 协程兼容而头疼!

YurunHttp 的目标是做最好用的 PHP HTTP Client 开发包!

特性

  • GET/POST/PUT/DELETE/UPDATE 等请求方式
  • 浏览器级别 Cookies 管理
  • 上传及下载
  • 请求头和响应头
  • 失败重试
  • 自动重定向
  • HTTP 代理方式请求
  • SSL 证书(HTTPS)
  • 并发批量请求
  • HTTP2
  • WebSocket
  • Curl & Swoole 环境智能兼容
  • 连接池

开发手册文档:https://doc.yurunsoft.com/YurunHttp

API 文档:https://apidoc.gitee.com/yurunsoft/YurunHttp

欢迎各位加入技术支持群17916227点击加群,如有问题可以及时解答和修复。

更加欢迎各位来提交PR(码云/Github),一起完善YurunHttp,让它能够更加好用。

重大版本更新日志

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

v4.3.0 新增支持连接池

v4.2.0 重构 Swoole 处理器,并发请求性能大幅提升 (PHP 版本依赖降为 >= 5.5)

v4.1.0 实现智能识别场景,自动选择适合 Curl/Swoole 环境的处理器

v4.0.0 新增支持 Swoole 并发批量请求 (PHP >= 7.1)

v3.5.0 新增支持 Curl 并发批量请求 (PHP >= 5.5)

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": "^4.3.0"
    }
}

然后执行 composer update 安装。

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

用法

更加详细的用法请看 examples 目录中的示例代码

简单调用

<?php
use Yurun\Util\HttpRequest;

$http = new HttpRequest;

// 设置 Header 4 种方法
$http->header('aaa', 'value1')
     ->headers([
         'bbb' => 'value2',
         'ccc' => 'value3',
     ])
     ->rawHeader('ddd:value4')
     ->rawHeaders([
         'eee:value5',
         'fff:value6',
     ]);

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

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

并发批量请求

use \Yurun\Util\YurunHttp\Co\Batch;
use \Yurun\Util\HttpRequest;

$result = Batch::run([
    (new HttpRequest)->url('https://www.imiphp.com'),
    (new HttpRequest)->url('https://www.yurunsoft.com'),
]);

var_dump($result[0]->getHeaders(), strlen($result[0]->body()), $result[0]->getStatusCode());

var_dump($result[1]->getHeaders(), strlen($result[1]->body()), $result[1]->getStatusCode());

只有 Swoole 并发请求会受到连接池限制,Curl 不受影响

Swoole 协程模式

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

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

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

连接池

在 YurunHttp 中,连接池是全局的,默认不启用。

每个不同的 hostportssl 都在不同的连接池中,举个例子,下面两个 url 对应的连接池不是同一个:

http://www.imiphp.comhost=www.imiphp.com, port=80, ssl=false

https://www.imiphp.comhost=www.imiphp.com, port=443, ssl=true

启用全局连接池:

\Yurun\Util\YurunHttp\ConnectionPool::enable();

禁用全局连接池:

\Yurun\Util\YurunHttp\ConnectionPool::disable();

写入连接池设置:

// 最大连接数=16个,连接数满等待超时时间(仅 Swoole 有效)=30s
// url 最后不要带斜杠 /
\Yurun\Util\YurunHttp\ConnectionPool::setConfig('https://imiphp.com', 16, 30);

YurunHttp 不会限制未设置的域名的连接数

特殊请求不启用连接池:

$http = new HttpRequest;
$http->connectionPool(false);

获取连接池对象及数据:

use Yurun\Util\YurunHttp\Handler\Curl\CurlHttpConnectionManager;
use Yurun\Util\YurunHttp\Handler\Swoole\SwooleHttpConnectionManager;

// 获取 Curl 连接池管理器,选择你所处环境对应的类,其实一般 Curl 不太需要连接池
// $manager = CurlHttpConnectionManager::getInstance();

// 获取 Swoole 连接池管理器,选择你所处环境对应的类
$manager = SwooleHttpConnectionManager::getInstance();

// 获取连接池对象集合
$pool = $manager->getConnectionPool('https://imiphp.com');

// 获取连接总数
$pool->getCount();

// 获取空闲连接总数
$pool->getFree();

// 获取正在使用的连接总数
$pool->getUsed();

// 获取连接池配置
$config = $pool->getConfig();

WebSocket Client

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();
});

Http2 兼容用法

$http = new HttpRequest;
$http->protocolVersion = '2.0'; // 这句是关键
$response = $http->get('https://wiki.swoole.com/');

Curl、Swoole Handler 都支持 Http2,但需要注意的是编译时都需要带上启用 Http2 的参数。

查看是否支持:

Curl: php --ri curl

Swoole: php --ri swoole

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

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);

更多用法详见文档:https://doc.yurunsoft.com/YurunHttp

商业合作

现在使用 Swoole 的项目越来越多,使用 YurunHttp 开发的代码,可以原生兼容 php-fpm 和 Swoole 两种环境。

YurunHttp 相比 Guzzle 性能更强,功能更加强大!

现承接使用 PHP 开发相关系统、SDK 等业务,有需要的请联系 QQ: 369124067

捐赠

开源不求盈利,多少都是心意,生活不易,随缘随缘……

More Repositories

1

PaySDK

PHP 集成支付 SDK ,集成了支付宝、微信支付的支付接口和其它相关接口的操作。支持 php-fpm 和 Swoole,所有框架通用。宇润PHP全家桶技术支持群:17916227
PHP
883
star
2

ChineseUtil

PHP 中文工具包,支持汉字转拼音、拼音分词、简繁互转、数字、金额大写;QQ群:17916227
PHP
494
star
3

YurunOAuthLogin

PHP 第三方登录授权 SDK,集成了QQ、微信、微博、Github等常用接口。支持 php-fpm 和 Swoole,所有框架通用。QQ群:17916227
PHP
421
star
4

Guzzle-Swoole

让基于 Guzzle 的项目完美无缝兼容 Swoole 协程,支持:Guzzle、Elasticsearch client——来自宇润 PHP 全家桶
PHP
160
star
5

php-tdengine

大数据引擎 TDengine 的 PHP 客户端扩展,支持 Swoole!
PHP
75
star
6

YurunProxy

基于 Swoole 的内网穿透,支持本地微信开发、Web开发,让外网能够访问到!山寨简易版 Ngrok!
PHP
67
star
7

YurunLock

PHP阻塞锁和非阻塞锁机制,内置解决并发锁重复执行的方案。目前支持文件、Redis、Memcache、Memcached。
PHP
50
star
8

mddoc

开源的 markdown 文档转 html 文档工具,它使用 php 开发,支持 php >= 5.4。它生成的 html 可以直接放在网站上,支持全文搜索、自定义 html 模版。
PHP
46
star
9

PHPChineseToPinyin

请移步:
40
star
10

ApiAgent

PHP开发的API接口代理,支持跨域接口代理和接口合并请求功能。程序员聚集群:74401592
PHP
38
star
11

yurun-crawler

宇润爬虫框架(Yurun Crawler) 是一个低代码、高性能、分布式爬虫采集框架,基于 imi 框架开发,运行在 Swoole 常驻内存的协程环境。
PHP
38
star
12

YurunPHP

YurunPHP是宇润软件专为懒人开发者设计的一款开源PHP框架,基于MVC动态分层架构,开发者可以根据需要自行扩充分层。宇润PHP交流群:17916227
PHP
35
star
13

PHPMailer-Swoole

安装最新版Swoole,开启一键协程化,使用原版phpmailer就可以实现协程化了。本项目已经没有维护下去的意义。
PHP
31
star
14

chinese-util-cpp

C++ 实现的汉字转拼音、拼音分词、简繁互转、数字转换、金额数字转换。
C++
30
star
15

swoole-co-pool

Swoole 协程工作池——来自宇润 PHP 全家桶
PHP
27
star
16

imi-gobang

PHP
24
star
17

influxdb-orm

一个用于 InfluxDB 时序数据库的 ORM,终结没有 InfluxDB ORM 的时代。QQ群:17916227
PHP
19
star
18

sql-diff

本项目实现了比较 MySQL 建表语句的差异,并生成结构同步代码,功能类似 Navicat 的结构同步。
PHP
16
star
19

yurun-crawler-example

宇润爬虫框架(Yurun Crawler)示例程序
PHP
15
star
20

tdengine-restful-connector

PHP TDEngine RESTful connector
PHP
15
star
21

nacos-php

Nacos php sdk. Request and response data are all strongly typed and IDE friendly. Complete test cases and support for Swoole Coroutine.
PHP
14
star
22

tdengine-orm

基于 tdengine-restful-connector、php-tdengine 开发的 TDEngine ORM。
PHP
11
star
23

ide-helper

让 PHP 扩展支持 IDE 代码提示,通过在 composer.json 配置,可以支持所有扩展,包括但不限于 Swoole、Redis 等
PHP
10
star
24

net-test-go

这是宇润使用 Go 语言开发的一个 Http 压测工具。
Go
9
star
25

CBL-Mariner-Builder

Microsoft Linux CBL-Mariner iso download
Shell
9
star
26

php-macro

支持在 PHP 代码中使用类似 C/C++ 中的宏,进行代码预编译。可以方便兼容不同版本和环境下运行的 PHP 代码。
PHP
9
star
27

swoole-shared-memory

Swoole Shared Memory (简称 SSM) 是为了解决 Swoole 常驻内存场景,多进程变量共享问题而开发的组件。
PHP
8
star
28

YurunBlog

基于 YurunPHP2 框架的博客系统!正在开发中!
PHP
7
star
29

php-env

宇润日常开发中,整理的一些常见的 PHP 环境相关的一键安装工具脚本。Composer 一键安装脚本。
Shell
7
star
30

YurunEvent

PHP事件类,支持全局事件和类中事件。程序员Q群:74401592
PHP
7
star
31

workerman-gateway-sdk

一个支持在 Swoole 或其它非 Workerman 环境,开发 Gateway Worker 的组件。
PHP
7
star
32

rust-webhook

宇润用 Rust 开发的简易 Webhook 服务,支持 Gitee 和 Github。
Rust
6
star
33

TypescriptAndVue

这是一个已经配置好的 TypeScript + Vue 传统多页面开发模式项目。
JavaScript
4
star
34

net-test-swoole

这是宇润使用 Swoole 开发的一个 Http 压测工具。
PHP
4
star
35

SphinxClient-Swoole

Sphinx Client 支持 Swoole 协程环境
PHP
3
star
36

VSCode-PHPComments

VSCode插件,用于添加PHP方法注释
TypeScript
3
star
37

SimplePagebar

一个使用TypeScript开发的简单分页条,支持首页、末页、上一页、下一页、自定义页码切换。
TypeScript
2
star
38

YurunRSS

PHP的RSS生成类,方便生成RSS文件
PHP
2
star
39

YurunAuth

基于YurunPHP框架的权限控制类,提供一个思路,如需在其它框架中使用请自行改造。
PHP
2
star
40

PHPTSChinese

请移步:
2
star
41

php-http-client-test

Guzzle、Saber 以及 YurunHttp 性能测试
PHP
1
star