大结 / aria2
与 aria2 通信
v1.2.1b
2017-01-03 14:17 UTC
Requires
- php: >=5.4.0
- ext-curl: *
This package is auto-updated.
Last update: 2024-09-11 10:23:24 UTC
README
通过 JSON-RPC 与 aria2 通信
安装
1. 安装 aria2c
确保 aria2c 正在运行且已启用 RPC,可以将以下内容添加到 /etc/rc.local /usr/local/bin/aria2c --enable-rpc --rpc-allow-origin-all -c -D
2. 需要Aria2.php
代码仅82行,但支持所有 RPC 方法。使用 PHP 的魔术方法 __call
2.1 通过 composer 安装
composer require daijie/aria2
2.2 或复制 Aria2.php
类 Aria2
Aria2 { __construct ( string $server [, string $token ] ) __destruct ( void ) __call(string $name, array $arg) public Object batch( [Callable $func ] ) public bool inBatch( void ) public array commit( void ) protected string req ( array $data ) }
用法
$aria2 = new Aria2('http://127.0.0.1:6800/jsonrpc'); // http://127.0.0.1:6800/jsonrpc is the default value, // equals to $aria2 = new Aria2 $aria2->getGlobalStat(); $aria2->tellActive(); $aria2->tellWaiting(0,1000); $aria2->tellStopped(0,1000); $aria2->addUri( ['https://www.google.com.hk/images/srpr/logo3w.png'], ['dir'=>'/tmp'] ); $aria2->tellStatus('1'); $aria2->removeDownloadResult('1'); //and more ...
另请参阅 Aria2 RPC 接口手册以获取方法列表
例如,这是 Aria2 手册中用 Python 编写的示例
>>> import urllib2, json, base64 >>> metalink = base64.b64encode(open('file.meta4').read()) >>> jsonreq = json.dumps({'jsonrpc':'2.0', 'id':'qwer', ... 'method':'aria2.addMetalink', ... 'params':[metalink]}) >>> c = urllib2.urlopen('https://:6800/jsonrpc', jsonreq) >>> c.read() '{"id":"qwer","jsonrpc":"2.0","result":["2089b05ecca3d829"]}'
如果你使用 php-aria2 与 PHP
<?php require 'vendor/autoload.php'; $metalink = file_get_contents('file.meta4'); $aria2 = new Aria2('https://:6800/jsonrpc'); $c = $aria2->addMetalink($metalink); #It means the method is aria2.addMetalink print_r($c);
批量请求
现在 php-aria2 支持 v1.2.0 中的 JSON-RPC 2.0 规范批量请求。在 v1.2.0 中引入了批量请求。
Aria2::batch
- 开始批量模式Aria2::inBatch
- 检测批量模式Aria2::commit
- 结束批量模式并提交命令
$aria2 = new Aria2('http://127.0.0.1:6800/jsonrpc'); $aria2->batch() ->getGlobalStat() ->tellActive() ->tellWaiting(0,1000) ->tellStopped(0,1000) ->addUri( ['https://www.google.com.hk/images/srpr/logo3w.png'], ['dir'=>'/tmp'] ) ->commit();
另一种方式是匿名函数,它也支持方法链。不要忘记提交。
$aria2 = new Aria2('http://aria2:6800/jsonrpc', "token:e6c3778f-6361-4ed0-b126-f2cf8fca06db"); $aria2->batch(function($aria2){ $aria2->getGlobalStat(); $aria2->system_listMethods(); }); $status = $aria2->commit();
系统方法
- system.multicall
- system.listMethods
- system.listNotifications
有一些系统方法,你可以使用以下方式调用它们
- Aria2::system_multicall
- Aria2::system_listMethods
- Aria2::system_listNotifications
php-aria2 自动将 _
转换为 .
。如果方法名没有 _
,php-aria2 将自动在前面添加 aria2.
$aria2 = new Aria2('http://127.0.0.1:6800/jsonrpc'); $aria2->system_listMethods(); $aria2->getGlobalStat();
示例 #1: 下载文件
$aria2->addUri( ['https://www.google.com.hk/images/srpr/logo3w.png'], ['dir'=>'/tmp'] );
示例 #2: 返回的数据
案例:无法下载
Array ( [id] => 1 [jsonrpc] => 2.0 [result] => Array ( [completedLength] => 0 [connections] => 0 [dir] => /tmp [downloadSpeed] => 0 [errorCode] => 1 [files] => Array ( [0] => Array ( [completedLength] => 0 [index] => 1 [length] => 0 [path] => [selected] => true [uris] => Array ( [0] => Array ( [status] => used [uri] => https://www.google.com.hk/images/srpr/logo3w.png ) ) ) ) [gid] => 2 [numPieces] => 0 [pieceLength] => 1048576 [status] => error [totalLength] => 0 [uploadLength] => 0 [uploadSpeed] => 0 ) )
案例:下载中(活动)
Array ( [id] => 1 [jsonrpc] => 2.0 [result] => Array ( [bitfield] => e0000000 [completedLength] => 3932160 [connections] => 1 [dir] => /data/files/lixian [downloadSpeed] => 75972 [files] => Array ( [0] => Array ( [completedLength] => 3145728 [index] => 1 [length] => 31550548 [path] => /data/files/lixian/茶经.陆羽.扫描版.pdf [selected] => true [uris] => Array ( [0] => Array ( [status] => used [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1 ) [1] => Array ( [status] => waiting [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1 ) [2] => Array ( [status] => waiting [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1 ) [3] => Array ( [status] => waiting [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1 ) [4] => Array ( [status] => waiting [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1 ) ) ) ) [gid] => 3 [numPieces] => 31 [pieceLength] => 1048576 [status] => active [totalLength] => 31550548 [uploadLength] => 0 [uploadSpeed] => 0 ) )
案例:已下载
Array ( [id] => 1 [jsonrpc] => 2.0 [result] => Array ( [bitfield] => fffffffe [completedLength] => 31550548 [connections] => 0 [dir] => /data/files/lixian [downloadSpeed] => 0 [errorCode] => 0 [files] => Array ( [0] => Array ( [completedLength] => 31550548 [index] => 1 [length] => 31550548 [path] => /data/files/lixian/茶经.陆羽.扫描版.pdf [selected] => true [uris] => Array ( [0] => Array ( [status] => used [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1 ) [1] => Array ( [status] => waiting [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1 ) [2] => Array ( [status] => waiting [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1 ) [3] => Array ( [status] => waiting [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1 ) [4] => Array ( [status] => waiting [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1 ) [5] => Array ( [status] => waiting [uri] => http://gdl.lixian.vip.xunlei.com/download?fid=zKHWI/O2IbQ07pi/0hPYP1OLwrBUbOEBAAAAACaqKvQbmfR7K7JcbWGT3XQBlDzs&mid=666&threshold=150&tid=3018BA81C31480902DC937770AC2734F&srcid=4&verno=1&g=26AA2AF41B99F47B2BB25C6D6193DD7401943CEC&scn=c7&i=0D2B59F64D6CCBB5A1507A03C3B685BC&t=4&ui=222151634&ti=106821253185&s=31550548&m=0&n=013A830CE1AD5D2EC2DCE21471C9A8C3E8D1D7CA2F64660000&ff=0&co=33BB9833AB0EE7AAEA94105B64C8013F&cm=1 ) ) ) ) [gid] => 3 [numPieces] => 31 [pieceLength] => 1048576 [status] => complete [totalLength] => 31550548 [uploadLength] => 0 [uploadSpeed] => 0 ) )
Docker 演示场
require docker-compose
Docker 演示场:nginx (17 MB) + php7-fpm (82 MB) + aria2c (6 MB)
初始化演示场
git clone https://github.com/shiny/php-aria2/
cd php-aria2/playground
docker-compose up
然后在另一个终端中输入 playground
docker-compose exec php composer require daijie/aria2
对于中国用户,我们建议使用 phpcomposer 镜像
docker-compose exec php composer config repo.packagist composer https://packagist.phpcomposer.com docker-compose exec php composer require daijie/aria2
之后,演示场结构
├── aria2.conf # Aria2 conf file ├── data # Store downloaded file ├── docker-compose.yml ├── nginx.conf # nginx conf └── www # Web dir ├── composer.json ├── composer.lock ├── index.php └── vendor ├── autoload.php ├── composer │ ├── ClassLoader.php │ ├── LICENSE │ ├── autoload_classmap.php │ ├── autoload_namespaces.php │ ├── autoload_psr4.php │ ├── autoload_real.php │ ├── autoload_static.php │ └── installed.json └── daijie └── aria2 ├── Aria2.php ├── LICENSE.txt ├── README.md └── composer.json
编辑 www/index.php 并在浏览器中访问 http://127.0.0.1:8080
更新
v1.2.1b
- 添加批量匿名函数
v1.2.0b
- 添加系统方法
- 添加批量模式
v1.1
现在支持 php-aria2 中的默认令牌(密钥),与 v1.0 兼容
之前
$aria2 = new Aria2('http://aria2:6800/jsonrpc'); $aria2->addUri( "token:e6c3778f-6361-4ed0-b126-f2cf8fca06db", ['https://dockerd.com.cn/sites/default/files/moby.svg'] ); $aria2->getGlobalStat("token:e6c3778f-6361-4ed0-b126-f2cf8fca06db");
之后
$aria2 = new Aria2('http://aria2:6800/jsonrpc', "token:e6c3778f-6361-4ed0-b126-f2cf8fca06db"); $aria2->addUri( ['https://dockerd.com.cn/sites/default/files/moby.svg'] ); $status = $aria2->getGlobalStat();