最近树莓派更新了最新版本,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相关推荐

  1. 微信公众平台操作获取token类

    /*** 微信公众平台操作类*/ class WeChat {private $_appid;private $_appsecret;public function __construct($id,$ ...

  2. 跳转页面下载文件需要附带Token请求头,如何实现ajax下载?

    我们的思路其实就是将二进制流以ajax的方式down下来,存储进blob当中,在采取base64的方式进行转换,因为a标签是可以直接访问base64的. downExcel() {var xhr = ...

  3. java redis快速入门_快速入门Redis系列(3)——Redis的JavaAPI操作(附带练习)

    作为快速入门Redis系列的第三篇博客,本篇为大家带来的是Redis的JavaAPI操作. 码字不易,先赞后看! Redis的JavaAPI操作 看完了上一篇博客,相信大家对于Redis的数据类型有了 ...

  4. token验证的前后端流程与操作

    token验证的前后端流程 1.什么是token? 一般我们所说的的token大多是指用于身份验证的token,在计算机身份认证中是令牌(临时)的意思. 2.生成token 生成Token的解决方案有 ...

  5. CentOS 下搭建 aria2 远程下载环境

    aria2 是另一款 Linux 下轻量级的多线程下载工具,支持 Http/Https.Ftp.BitTorrent.Metalink 协议.它比 axel 优秀的地方在于:完全支持 BitTorre ...

  6. Aria2 使用手札

    这是感觉写的比较好的一篇博客了,收藏了 http://www.cnblogs.com/RhinoC/p/aria2.html# Aria2 使用手札(简易部署 + 快速进阶) 没错,又是受够了迅雷.旋 ...

  7. springboot+shiro+jwt实现token认证登录

    准备: springboot 2.5.5 jdk 1.8 没有操作刷新token功能,也没有放redis做缓存 1.先贴代码 2.后讲一下验证逻辑 1.导入依赖 <!--shiro-->& ...

  8. token 登录途中自动延迟失效时间

    token 登录途中自动延迟失效时间 方法一 refresh token 前端 所谓多请求,就是指在短时间内同时发生多个请求,如果此时token已经过期,那么这些请求都会出现token过期请求失败的情 ...

  9. Aria2 使用手札(简易部署 + 快速进阶)

    没错,又是受够了迅雷.旋风的各种奇葩减速(哥哥我还买了了VIP!),IDM 对协议支持又太少还有事没事提示你不是正版三天两头闹着要更新.于是我想起来之前看到过的 Aria2,虽然之前也只是略有耳闻,但 ...

  10. centos安装aria2c_CentOS下搭建Aria2远程下载环境

    关于Aria2 Aria2是一个基于命令行的开源下载工具,支持多协议.多来源(HTTP/HTTPS.FTP.BitTorrent.Metalink协议等).多线程的下载.它比axel优秀的地方在于完全 ...

最新文章

  1. [每日一题] 11gOCP 1z0-053 :2013-09-29 Flashback Data Archive ...................................6...
  2. Redis学习笔记之Redis的对象
  3. 第三章 寄存器(内存访问)
  4. 如何优雅的定义 App 的界面设计
  5. Java修饰符public,private,protected及默认的区别
  6. 4.2 react patterns(转)
  7. 一文读懂FFT,海宁窗(hann)和汉明窗(hamming)的区别,如何选择窗函数
  8. 概率论————思维导图(上岸必备)(数字特征)
  9. drop与delete的区别
  10. quicktime for java,QuickTime是什么意思
  11. 第39级台阶--递归
  12. hive修改分区信息
  13. java同一秒请求多次接口_java – 限制用户每秒发出有限的请求
  14. 如何理解混淆矩阵,以及预测少数类的评估指标?
  15. 北斗星历星钟性能总结
  16. Linux下C/C++实现以十六进制的形式显示命令(xxd)
  17. Vue beforeRouteUpdate 监测路由
  18. RBF(径向基)网络
  19. (1)ESP8266微信门铃
  20. 电子实验记录本ELN的好处是什么?---如何计算电子实验记录本的投资回报率ROI?

热门文章

  1. Type-C PD协议取电SINK受电端9V12V15V20V
  2. Type-C PD充电器诱骗取电5V9V12V15V20V,XSP06+锂电池(筋膜枪)充电
  3. YY 数据库平台化建设实践
  4. 机器学习、数据挖掘、神经网络、人工智能和模式识别之间,主要是什么关系
  5. 一天狂点3.7万个赞! 男子因“点赞过多”被大众点评网处罚 法庭上吵翻
  6. Codeforces 918D - MADMAX
  7. 【智能电网】分数阶微积分在决策系统中的应用,通过决策树实现智能电网管理(Matlab代码实现)
  8. qfiledialog保存时为文件名添加后缀
  9. Kaggle泰坦尼克号幸存者预测
  10. 计算机系统常见故障及处理,电脑常见故障以及解决方案都在这里!