YurunHttp 是開源的 PHP HTTP 類庫,支持鏈式操做,簡單易用。php
支持全部常見的 GET、POST、PUT、DELETE、UPDATE 等請求方式,支持 Http二、WebSocket、瀏覽器級別 Cookies 管理、上傳下載、設置和讀取 header、Cookie、請求參數、失敗重試、限速、代理、證書等。html
支持 Curl 和 Swoole 環境智能識別兼容。git
API 文檔:https://apidoc.gitee.com/yuru...github
Github:https://github.com/Yurunsoft/...web
Gitee:https://gitee.com/yurunsoft/Y...json
git 倉庫中 examples 目錄裏是示例代碼!
排行 | 名稱 | 時間(單位:秒) | 環境 |
---|---|---|---|
1 | yurunhttp-swoole | 1.69s | Swoole |
2 | yurunhttp-curl | 2.08s | Curl |
3 | guzzle | 2.71s | Curl |
4 | saber | 2.77s | Swoole |
排行 | 名稱 | 時間(單位:秒) | 環境 |
---|---|---|---|
1 | yurunhttp-swoole | 1.21s | Swoole |
2 | saber | 1.47s | Swoole |
3 | yurunhttp-curl | 3.25s | Curl |
4 | guzzle | 7.39s | Curl |
測試倉庫:https://github.com/Yurunsoft/...api
視頻地址:https://www.bilibili.com/vide...瀏覽器
每一個小版本的更新日誌請移步到 Release 查看websocket
v4.2.0 重構 Swoole 處理器,併發請求性能大幅提高 (PHP 版本依賴降爲 >= 5.5)swoole
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安裝,遵循psr-4自動加載規則,在你的 composer.json 中加入下面的內容
{ "require": { "yurunsoft/yurun-http": "^4.2.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();
use \Yurun\Util\YurunHttp\Co\Batch; $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());
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(); });
$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目錄中的示例代碼