User-Profile-Image
hankin
  • 5
  • 首页
  • Git
  • 分类
    • 笔记
    • 折腾
  • 页面
    • 关于
    • 简介
    • 联系
  • 友链
    • 导航
Help?

Please contact us on our email for need any support

Support
    首页   ›   折腾   ›   正文
折腾

Aria2使用方法-命令行与jsonrcp

2020-02-22 18:21:22
2887  0 1

Aria2简介

  Aria2是一款用于Http、Ftp/Sfpt、Torrent和Metalink等协议下载的软件。Http和Ftp/Sfpt支持多线程、多服务器、断点续传、用户验证。Torrent和Metalink支持去中心网络(DHT)、添加Tracker等。
  目前Aria2发行版很多,支持Win、Mac、Linux和Arm。Aria2的效率很高,资源占用很小,而且支持jsonrcp,天生就适合做远程下载。不要觉得这只是个命令行下载软件入手难度肯定很大,其实加上webui后,使用非常的方便。
Aria2的项目地址是:https://github.com/aria2/aria2

使用方法

  命令行模式

展开

  下载文件

aria2c http://example.org/mylinux.iso

  下载http、ftp、sftp需要认证

aria2c --http-user=admin --http-passwd=admin http://example.org/mylinux.iso
aria2c --ftp-user=admin --ftp-passwd=admin http://example.org/mylinux.iso
aria2c --ssh-host-key-md=sha-1/md5=b0304edf4c3#十六进制摘要 http://example.org/mylinux.iso

  后台下载

aria2c -D http://example.org/mylinux.iso
aria2c –deamon=true http://example.org/mylinux.iso

  重命名

aria2c --out=linux.iso http://example.org/mylinux.iso
aria2c --o linux.iso http://example.org/mylinux.iso

  下载大文件时分段多线程下载

aria2c -s 2 -x 2 -j 10 -c http://example.org/mylinux.iso
# -s 2使用2线程 -x 2最大使用2线程 -j 10 同时下载10个 -c 断点续传
#Aria2原版默认最大32线程,单服务器最大16个连接。
#可以通过自己git源码然后修改/aria2/srcOptionHandlerFactory.cc

  带验证的下载

aria2c -s 2 -x 2 -j 10 -c --checksum=md5=xxxxxxxxxxxxx http://example.org/mylinux.iso
#这里校验了文件的md5信息熵,保证下载文件和源文件一致
#aira2支持md5和sha-1的信息熵验证,如果检验不一致,aria2会自动重新下载。

  批量下载

aria2c -i url.txt

  使用Cookie下载

aria2c –essay-header=’Cookie:cookie名称=cookie内容’ url
aria2c –load-cookies=cookie文件 url
使用alias简化操作
alias xunlei='aria2c -s 2  -c -x 2 -j 10 –load-cookies=cookie文件'
xunlei "下载链接url"

  BT下载

aria2c http://example.org/mylinux.torrent
aria2c 'magnet:?xt=urn:btih:248D0A1CD08284299DE78D5C1ED359BB46717D8C'
aria2c http://example.org/mylinux.metalink

  更多的下载命令和模式,可以查看Aria2手册来掌握

  jsonrpc的WEB-UI模式

展开

  这个模式下,需要使用aria2.conf配置文件,这个模式也是最简单和用的最多的模式。


  启动方法:


ariac -c /aria2/aria2.conf -d

  建议使用doubi的一键脚本

## '#'开头为注释内容, 选项都有相应的注释说明, 根据需要修改 ##
## 被注释的选项填写的是默认值, 建议在需要修改时再取消注释 ##
## 文件保存相关 ##
# 文件的保存路径(可使用绝对路径或相对路径), 
此项设置为自己的存放地址
dir=/home/file
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
#disk-cache=32M
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
# file-allocation=none
# 断点续传
continue=true
## 下载连接相关 ##
# 最大同时下载任务数, 运行时可修改, 默认:5,最大16
max-concurrent-downloads=10
# 同一服务器连接数, 添加时可指定, 默认:1,最大16
max-connection-per-server=5
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M
# 单个任务最大线程数, 添加时可指定, 默认:5,最大32
split=20
# 整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0
# 单个任务下载速度限制, 默认:0
#max-download-limit=0
# 整体上传速度限制, 运行时可修改, 默认:0
max-overall-upload-limit=1M
# 单个任务上传速度限制, 默认:0
#max-upload-limit=1000
# 禁用IPv6, 默认:false
disable-ipv6=false
## 进度保存相关 ##
# 从会话文件中读取下载任务,这里要修改成自己的Aria2目录
input-file=/aria2/aria2.session
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件,这里要修改成自己的Aria2目录
save-session=/aria2.session
# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
save-session-interval=60
## RPC相关设置 ##
# 启用RPC, 默认:false
enable-rpc=true
# 允许所有来源, 默认:false
rpc-allow-origin-all=true
# 允许非外部访问, 默认:false
rpc-listen-all=true
# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=select
# RPC监听端口, 端口被占用时可以修改, 默认:6800
rpc-listen-port=6800
# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项,这里要修改成自己想要的密码
rpc-secret=12345678
# 设置的RPC访问用户名, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-user=<USER>
# 设置的RPC访问密码, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-passwd=<PASSWD>
# 是否启用 RPC 服务的 SSL/TLS 加密,
# 启用加密后 RPC 服务需要使用 https 或者 wss 协议连接,如果架设在linux上,可以使用.pem/.crt,
#如果架设在win和macs上自用的话,此项可设为false或者注释掉。
#win服务器上证书需要为不带密码的PKCS12格式
#生成命令为openssl pkcs12 -export -out ssl.pfx -inkey /certs/privkey.pem  -in /certs/cert.pem
rpc-secure=true
# 在 RPC 服务中启用 SSL/TLS 加密时的证书文件(.pem/.crt)这里要修改成自己证书路径
rpc-certificate=/ssl/fullchain.pem
# 在 RPC 服务中启用 SSL/TLS 加密时的私钥文件(.key)这里要修改成自己证书路径
rpc-private-key=/ssl/privkey.pem
## BT/PT下载相关 ##
# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413
# 单个种子最大连接数, 默认:55
#bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=true
# 打开IPv6 DHT功能, PT需要禁用
#enable-dht6=false
# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999
# 本地节点查找, PT需要禁用, 默认:false
#bt-enable-lpd=true
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true
# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
# 客户端伪装, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=0.1
# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
force-save=false
# BT校验相关, 默认:true
#bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
#bt-save-metadata=true
#添加tracker,tracker地址用逗号“,”隔开,tracker地址可上https://github.com/ngosang/trackerslist找到最新的。
#这里只做示例
bt-tacker=udp://tracker.coppersurfer.tk:6969/announce,udp://tracker.leechers-paradise.org:6969/announce
#添加ipv4、ipv6DHT文件这里只做示例
dht-file-path=/aria2/dht.dat
dht-file-path6=/aria2/dht6.dat

  Aria2 webui

  这里介绍一款我非常喜欢用的webui:Aria2NG,展示地址,逻辑清晰,设计的非常美观大方。可以搭配web服务器,也可以在win上直接打开,在rpc配置处填写自己的服务器地址、rpc端口和密码即可使用。



  架设在服务器上时推荐将自己的Aria2 RPC密钥设计复杂些,设置rpc-secure=true,并绑定证书,这样才能保证安全。

  windows使用aria2

  win主要是搭配vbs脚本(后台运行、开机启动)和Aria2NG来使用的。1.35版的Aria2下载地址,aria2.conf的内容基本不变,只是把下载输出目录以及HTTPS证书等选项修改即可。可以上我的git上,获取一键包(老早之前写的,目前来看需要更新一下aria2c.exe和aira2ng)。

Aria2高级应用

  Shell控制jsonrpc

展开

  上边说了Aria2有命令行模式和jsonrpc的webui模式,命令行模式可以实时交互,但不能美观。jsonrpc的webui模式,美观直接,但添加定时任务,比如用爬虫监控网站,并下载软件最新版本就不太方便。

  那怎么又美观,又能有自主性呢?

  Shell控制了解一下?

  下面直接给出命令:

curl 'https://example.org:6800/jsonrpc' -H 'Accept: application/json, text/plain, */*' -H 'Content-Type: application/json;charset=UTF-8' --data-binary '{"jsonrpc":"2.0","method":"aria2.addUri","id":"Y3VybA==","params":["token:12345678",["https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=YOUR_LICENSE_KEY&suffix=tar.gz"],{"http-user":"admin","http-passwd":"admin"}]}' --compressed

  命令解释:

https://example.org:6800,替换为你的服务器域名或者+端口;
"method":"aria2.addUri",这里不懂不要动;
"id":"Y3VybA==",id不可以为空,可以任意填写,但需要base64编码("Y3VybA=="意思是curl);
"token:12345678",这里token是aria2.conf的rpc-secret=12345678,根据情况做出调整;
紧跟的["https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=YOUR_LICENSE_KEY&suffix=tar.gz"],这里便是需要下载网址(这里的网址是从Geoip下载免费的IP城市数据库);
后边的{"http-user":"admin","http-passwd":"admin"},是下载所需的认证方式,可选ftp,sftp。

  Shell控制jsonrpc的限制

   不能批量下载,当然你可以将批量下载地址读取成队列来添加到aria2下载中。

   不能对Http/ftp/sftp进行文件校验下载即

--checksum=md5=xxxxxxxxxxxxx

   添加种子不方便。添加种子的命令是

aria2.addTorrent/aria2.addMetalink

   示例如下

curl 'https://example.org:6800/jsonrpc' -H 'Accept: application/json, text/plain, */*' -H 'Content-Type: application/json;charset=UTF-8' --data-binary '{"jsonrpc":"2.0","method":"aria2.addTorrent","id":"Y3VybA==","params":["token:12345678","ZDg6YW5ub3iBDbtz.....sLEsd5lZQ==",[],{}]}' --compressed
  • 这里是用添加torrent作为示范,Aria2添加种子将种子内容读取为Base64,然后添加到token后面,内容是"ZDg6YW5ub3iBDbtz.....sLEsd5lZQ=="
  •   Aria2关于jsonrpc的更多内容请看官方文档

 python控制Aria2的jsonrpc

展开

  其实curl已经非常方便了,这里仅贴两份较为简单的python脚本。

   1.使用pyaria2类库

from pyaria2 import Aria2RPC
jsonrpc = Aria2RPC(url="http://localhost:6800/rpc",token="12345678")
res = jsonrpc.addUri(['http://example.org/mylinux.iso'], options)
print(res)
#http://localhost:6800/rpc设置为自己的地址,token=12345678,设为自己的密码
#http://example.org/mylinux.iso设置为自己需要的。
#添加种子和磁力文件的方式参考curl。
#更多可参考pyaria2的源码

   2.自己封装

import requests
import requests
import time
ariaurl="http://localhost:6800/jsonrpc"#自己的地址
dlurl="http://xxx.xxx.xxx/xxx.xxx" #需下载文件的真实
fn="XXX.XXX" #落地的文件名,
dn="XXX/XXXX/xxxx" #本地目录
maxdowns=3 #最大并发数
#jsondata rpc调用的数据头(固定部分)
jsondata={
    "jsonrpc":"2.0",
    "id":"Y3VybA==",
}

def ariadown(url,fname,fdir): #url 是下载文件的链接,fanme和fdir分别为本地文件名和目录
   reqdata=jsondata
   reqdata["method"] = "aria2.tellActive" #aria 取当前并发数的的方法
   ret = requests.post(ariaurl, json=reqdata)
   #print(ret.json())
   curdowns=len(ret.json()["result"])
   while curdowns >= maxdowns:
       print("Waitting for links...")
       time.sleep('2') #等不到就睡一觉
       ret = requests.post(ariaurl, json=reqdata)
       curdowns=len(ret.json()["result"])
   reqdata["method"] = "aria2.addUri" #aria 增加下载的方法
   reqdata['params'] = [[],{}]
   reqdata['params'][0] = [url]
   reqdata['params'][1] = {"out" : fname,"dir" : fdir}
   ret = requests.post(ariaurl, json=reqdata)
   return(ret.status_code)
ret = ariadown(dlurl,fn,dn) #下载的调用
print(ret) #是不是200?
#来自csdn

  Powershell使用jsonrpc控制aria2

展开

这个方法估计用的人更少,暂且贴出来吧:

Invoke-WebRequest -Uri "https://example.org:6800/jsonrpc" -Method "POST" -Headers @{"Accept"="application/json, text/plain, */*";} -ContentType "application/json;charset=UTF-8" -Body "{`"jsonrpc`":`"2.0`",`"method`":`"aria2.addUri`",`"id`":`"Y3VybA==`",`"params`":[`"token:12345678`",[`"https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=YOUR_LICENSE_KEY&suffix=tar.gz`"],{}]}";

  修改Aria2源码编译多线程

展开

  先git源码,然后进入aria2/src,找到OptionHandlerFactory.cc

将


OptionHandler* op(new NumberOptionHandler(PREF_MAX_CONNECTION_PER_SERVER,TEXT_MAX_CONNECTION_PER_SERVER,"1", 1, 16, 'x'));
PREF_MIN_SPLIT_SIZE, TEXT_MIN_SPLIT_SIZE, "20M", 1_m, 1_g, 'k'));
PREF_CONNECT_TIMEOUT, TEXT_CONNECT_TIMEOUT, "60", 1, 600));
PREF_PIECE_LENGTH, TEXT_PIECE_LENGTH, "1M", 1_m, 1_g));
new NumberOptionHandler(PREF_RETRY_WAIT, TEXT_RETRY_WAIT, "0", 0, 600));
new NumberOptionHandler(PREF_SPLIT, TEXT_SPLIT, "5", 1, -1, 's'));

修改为


OptionHandler* op(new NumberOptionHandler(PREF_MAX_CONNECTION_PER_SERVER,TEXT_MAX_CONNECTION_PER_SERVER,"128", 1, -1, 'x'));
PREF_MIN_SPLIT_SIZE, TEXT_MIN_SPLIT_SIZE, "4K", 1_k, 1_g, 'k'));
PREF_CONNECT_TIMEOUT, TEXT_CONNECT_TIMEOUT, "30", 1, 600));
PREF_PIECE_LENGTH, TEXT_PIECE_LENGTH, "4k", 1_k, 1_g));
new NumberOptionHandler(PREF_RETRY_WAIT, TEXT_RETRY_WAIT, "2", 0, 600));
new NumberOptionHandler(PREF_SPLIT, TEXT_SPLIT, "8", 1, -1, 's'));

  保存退出后,进入aria2目录,

./configure
make -j n
sudo make install
这样就编译成功并安装好了

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

1 打赏
评论 (0)

点击这里取消回复。

欢迎您 游客  

Pippi
如果文章折叠按钮不可用,请刷新一下重试。
10文章 0评论 25点赞 118608浏览
随机文章
记录一下wordpress建站和主题选择
3年前
Aria2使用方法-命令行与jsonrcp
3年前
升级esxi应该注意的
3年前
Copyright © 2023 网站备案号: 豫ICP备2023003923号-1 豫公网安备 41010502005687号

豫公网安备 41010502005687号

smarty_hankin 主题. Designed by hankin
主页
页面
  • 关于
  • 简介
  • 联系
博主
Pippi
Pippi 管理员
折腾笔记
10 文章 0 评论 118608 浏览
测试
测试
赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付