YurunHttp — это высокопроизводительный клиент HTTP с поддержкой автоматического распознавания сценариев использования curl/swoole. Поддерживает цепочечные операции, простоту и удобство в использовании. Обеспечивает возможность параллельной отправки запросов, поддержку протокола HTTP2 и двунаправленной связи через WebSocket.
Очень хорошо подходит для создания универсальных пакетов SDK, где нет необходимости беспокоиться о совместимости со swoole корутинами! Цель YurunHttp — стать лучшим пакетом для разработки клиента HTTP на PHP!
Для логов каждого малого выпуска перейдите в раздел 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 не ограничен
<?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();
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 = 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
Этот метод поддерживается только 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
.
<?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 )