使用JSONRPC操作附带token(secret)的aria2
最近树莓派更新了最新版本,pi4,终于换上了千兆网卡还有双USB3.0(据说是一个hub?好在我只用一个口)。终于可以尝试做一个像样的NAS了。因为已经有小白智家可以同步手机内容到百度云,所以,这次的目标很简答, 使用pi4搭aria2+samba,以实现自动下载,电视直接播放的功能。同时还可以兼职备份电脑上的文件。
----------------------------------------分割线,以下正文-----------------------------------------------------------------------------
首先,jsonrpc是http调用,完全可以用postman或者火狐自带插件进行调试,跟普通restful接口差不多。但调试过程中,苦于不了解aria2的jsonrpc结构,总是报一些奇怪的错误,其中,最常见的如下:
{"id":null,"jsonrpc":"2.0","error":{"code":-32600,"message":"Invalid Request."}}
这种一般使用了错误的httpMethod,aria2的jsonrpc需使用HttpMethod="POST"
{"id":null,"jsonrpc":"2.0","error":{"code":-32700,"message":"Parse error."}}
这种错误源于1- Content-Type不正确,正确的Content-Type应该是application/json,2-传入的json结构不正确,3-Content-Length不正确,如果用火狐调试,请每次删除Content-Length的header,由火狐自动生成
在网上找到了正确的JSON结构如:
{"jsonrpc": "2.0", "id": "qwer", "method": "aria2.addUri", "params": [["http://www.baidu.com"],{"out":"index.html" ,"dir":"/home/"}]}
POST过去,仍旧有问题,提示
{"id":"qwer","jsonrpc":"2.0","error":{"code":1,"message":"Unauthorized"}}
看上去,应该是我设置了token的原因,查看aria2官方文档,文档上只说使用http调用jsonrpc,需要保留basic认证,但他们会慢慢去除。通过百度basic认证原理,需要在header中加入Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx(xxxxx是base64encode之后的username:password),password好说,可以理解为token值,但username是什么?我尝试了token、username或者aria2的实例名,都不正确,仍旧提示Unauthorized,看来这个不靠谱。
走投无路的我,看上去只能曲线救国了,因为大学期间学过一段时间python,再百度一下python操作aria2的类库,最后找到了pyaria2,通过网上的例子(如下),仍旧崩盘,还是提示Unauthorized。
from pyaria2 import Aria2RPC jsonrpc = Aria2RPC()set_dir = os.path.dirname('/home/pi/movie/')options = {"dir": set_dir, "out": '追龙Ⅱ.mkv' }res = jsonrpc.addUri(['magnet:?xt=urn:btih:a9d9cf513b2ddef1b09ec8c7d32847a8aa089463&dn=[电影天堂www.dy2018.com]追龙ⅡHD高清国语中字.mkv'], options = options)
既然python有类库操作aria2,肯定应该考虑到了token的情景,所以问题应该出在例子本身。查看pyaria2的源码,发现两段关键代码
def __init__(self, url="http://localhost:6800/rpc", token=None):self._url = urlif token:self._token = 'token:' + token else:self._token = tokenself._client = ServerProxy(self._url) def addUri(self,uris,options):params = [urls, options]if self._token:params.insert(0.self._token) return self._client.aria2.addUri(*params)
可以看到,Jsonrpc对象在初始化的时候,是可以指定token的,同时,初始化的时候,token增加了“token:”的头,比如我的token是secret,最终token的值是“token:secret”,同时,token在发送的时候,被放入了params的第一位。
修改一下我们的python代码
from pyaria2 import Aria2RPC jsonrpc = Aria2RPC(token="secret")set_dir = os.path.dirname('/home/pi/movie/')options = {"dir": set_dir, "out": '追龙Ⅱ.mkv' }res = jsonrpc.addUri(['magnet:?xt=urn:btih:a9d9cf513b2ddef1b09ec8c7d32847a8aa089463&dn=[电影天堂www.dy2018.com]追龙ⅡHD高清国语中字.mkv'], options = options)print(res)
终于成功,接下来,我们根据python结果,调整一下http调用jsonrpc的结构
{"jsonrpc": "2.0", "id": "qwer","method": "aria2.addUri","params": ["token:secret",["http://www.baidu.com"],{"out":"index.html" ,"dir":"/home/"}] }
同样成功!yes,终于搞定了aria2的jsonrpc调用。
转载于:https://www.cnblogs.com/Damos/p/11302080.html
使用JSONRPC操作附带token(secret)的aria2相关推荐
- 微信公众平台操作获取token类
/*** 微信公众平台操作类*/ class WeChat {private $_appid;private $_appsecret;public function __construct($id,$ ...
- 跳转页面下载文件需要附带Token请求头,如何实现ajax下载?
我们的思路其实就是将二进制流以ajax的方式down下来,存储进blob当中,在采取base64的方式进行转换,因为a标签是可以直接访问base64的. downExcel() {var xhr = ...
- java redis快速入门_快速入门Redis系列(3)——Redis的JavaAPI操作(附带练习)
作为快速入门Redis系列的第三篇博客,本篇为大家带来的是Redis的JavaAPI操作. 码字不易,先赞后看! Redis的JavaAPI操作 看完了上一篇博客,相信大家对于Redis的数据类型有了 ...
- token验证的前后端流程与操作
token验证的前后端流程 1.什么是token? 一般我们所说的的token大多是指用于身份验证的token,在计算机身份认证中是令牌(临时)的意思. 2.生成token 生成Token的解决方案有 ...
- CentOS 下搭建 aria2 远程下载环境
aria2 是另一款 Linux 下轻量级的多线程下载工具,支持 Http/Https.Ftp.BitTorrent.Metalink 协议.它比 axel 优秀的地方在于:完全支持 BitTorre ...
- Aria2 使用手札
这是感觉写的比较好的一篇博客了,收藏了 http://www.cnblogs.com/RhinoC/p/aria2.html# Aria2 使用手札(简易部署 + 快速进阶) 没错,又是受够了迅雷.旋 ...
- springboot+shiro+jwt实现token认证登录
准备: springboot 2.5.5 jdk 1.8 没有操作刷新token功能,也没有放redis做缓存 1.先贴代码 2.后讲一下验证逻辑 1.导入依赖 <!--shiro-->& ...
- token 登录途中自动延迟失效时间
token 登录途中自动延迟失效时间 方法一 refresh token 前端 所谓多请求,就是指在短时间内同时发生多个请求,如果此时token已经过期,那么这些请求都会出现token过期请求失败的情 ...
- Aria2 使用手札(简易部署 + 快速进阶)
没错,又是受够了迅雷.旋风的各种奇葩减速(哥哥我还买了了VIP!),IDM 对协议支持又太少还有事没事提示你不是正版三天两头闹着要更新.于是我想起来之前看到过的 Aria2,虽然之前也只是略有耳闻,但 ...
- centos安装aria2c_CentOS下搭建Aria2远程下载环境
关于Aria2 Aria2是一个基于命令行的开源下载工具,支持多协议.多来源(HTTP/HTTPS.FTP.BitTorrent.Metalink协议等).多线程的下载.它比axel优秀的地方在于完全 ...
最新文章
- [每日一题] 11gOCP 1z0-053 :2013-09-29 Flashback Data Archive ...................................6...
- Redis学习笔记之Redis的对象
- 第三章 寄存器(内存访问)
- 如何优雅的定义 App 的界面设计
- Java修饰符public,private,protected及默认的区别
- 4.2 react patterns(转)
- 一文读懂FFT,海宁窗(hann)和汉明窗(hamming)的区别,如何选择窗函数
- 概率论————思维导图(上岸必备)(数字特征)
- drop与delete的区别
- quicktime for java,QuickTime是什么意思
- 第39级台阶--递归
- hive修改分区信息
- java同一秒请求多次接口_java – 限制用户每秒发出有限的请求
- 如何理解混淆矩阵,以及预测少数类的评估指标?
- 北斗星历星钟性能总结
- Linux下C/C++实现以十六进制的形式显示命令(xxd)
- Vue beforeRouteUpdate 监测路由
- RBF(径向基)网络
- (1)ESP8266微信门铃
- 电子实验记录本ELN的好处是什么?---如何计算电子实验记录本的投资回报率ROI?
热门文章
- Type-C PD协议取电SINK受电端9V12V15V20V
- Type-C PD充电器诱骗取电5V9V12V15V20V,XSP06+锂电池(筋膜枪)充电
- YY 数据库平台化建设实践
- 机器学习、数据挖掘、神经网络、人工智能和模式识别之间,主要是什么关系
- 一天狂点3.7万个赞! 男子因“点赞过多”被大众点评网处罚 法庭上吵翻
- Codeforces 918D - MADMAX
- 【智能电网】分数阶微积分在决策系统中的应用,通过决策树实现智能电网管理(Matlab代码实现)
- qfiledialog保存时为文件名添加后缀
- Kaggle泰坦尼克号幸存者预测
- 计算机系统常见故障及处理,电脑常见故障以及解决方案都在这里!