1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yurunsoft-YurunHttp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

YurunHttp

Последняя версия [Статус GitHub Workflow (ветка)] Версия PHP Документация IMI Лицензия IMI

Краткое описание

YurunHttp — это высокопроизводительный клиент HTTP с поддержкой автоматического распознавания сценариев использования curl/swoole. Поддерживает цепочечные операции, простоту и удобство в использовании. Обеспечивает возможность параллельной отправки запросов, поддержку протокола HTTP2 и двунаправленной связи через WebSocket.

Очень хорошо подходит для создания универсальных пакетов SDK, где нет необходимости беспокоиться о совместимости со swoole корутинами! Цель YurunHttp — стать лучшим пакетом для разработки клиента HTTP на PHP!

Основные характеристики

  • 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 Нажмите, чтобы присоединиться Если у вас возникли вопросы, вы можете получить помощь и исправить их в любое время. Мы особенно рады видеть ваши Pull Requests (Gitee/GitHub), вместе мы сделаем YurunHttp ещё более удобным.

Логи крупных версий

Для логов каждого малого выпуска перейдите в раздел Releases 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"; для автоматической загрузки классов. (Примечание: не забудьте пространства имен)

Пример использования

Для более подробной информации обратитесь к примерам кода в директории examples.

Простое использование

<?php
use Yurun\Util\HttpRequest;
$http = new HttpRequest;

// Установка заголовков четырьмя способами
$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;
go('test');

function test()
{
    $http = new HttpRequest;
    $response = $http->get('http://www.baidu.com');
    echo 'html:', PHP_EOL, $response->body();
}
```### Пул соединений
В YurunHttp пул соединений является глобальным и по умолчанию отключен.

Каждый уникальный `host`, `port`, `ssl` находится в своём пуле соединений. Например, два следующих URL имеют разные пулы соединений:`http://www.imiphp.com` (`host=www.imiphp.com, port=80, ssl=false`)
 `https://www.imiphp.com` (`host=www.imiphp.com, port=443, ssl=true`)

**Активация глобального пула соединений:**
```php
\Yurun\Util\YurunHttp\ConnectionPool::enable();

Дезактивация глобального пула соединений:

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

Запись конфигурации пула соединений:

// Максимальное количество соединений равно 16, время ожидания при заполнении пула (только для Swoole) равно 30 секундам
// В конце 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

go(function(){
    $url = 'ws://127.0.0.1:1234/';
    $http = new HttpRequest;
    $client = $http->websocket($url);
    if(!$client->isConnected())
    {
        throw new \RuntimeException('Подключение не удалось');
    }
    $client->send('data');
    $recv = $client->recv();
    var_dump('получено:', $recv);
    $client->close();
});

Совместимость с HTTP/2

$http = new HttpRequest;
$http->protocolVersion = '2.0'; // Это ключевое условие
$response = $http->get('https://wiki.swoole.com/');

Обработчики Curl и Swoole поддерживают HTTP/2, но стоит отметить, что при компиляции PHP должны быть указаны параметры для активации HTTP/2.Проверка поддержки: Curl: php --ri curl Swoole: php --ri swoole

Полностью двусторонний метод HTTP/2

Этот метод поддерживается только 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();
// Запрос к API
$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('sent:' . $streamId);
        // Получение ответа (поддерживает выполнение в нескольких корутин)
        $response = $client->recv($streamId, 3);
        $content = $response->body();
        var_dump($response);
    });
}

Для более подробной информации обратитесь к примеру examples/http2Client.php.

PSR-7 запрос к API

<?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, становятся всё более популярными. Код, созданный с использованием YurunHttp, может работать как с php-fpm, так и со Swoole.

YurunHttp превосходит Guzzle по производительности и функциональности!Принимаем заказы на разработку систем, SDK и других проектов на PHP. Для связи пишите на QQ: 369124067

Донат

Открытый исходный код не приносит дохода, любое пожертвование — это знак внимания. Жизнь нелегка, будем надеяться...

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
PHP и 2 других языков
MIT
Отмена

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/yurunsoft-YurunHttp.git
git@api.gitlife.ru:oschina-mirror/yurunsoft-YurunHttp.git
oschina-mirror
yurunsoft-YurunHttp
yurunsoft-YurunHttp
dev