发表于 2020-2-3 15:35

申请会员ID:Froster

1、申请ID:Froster
2、个人邮箱:815559068@qq.com
3、原创技术文章:


# 使用 python 调用 Aria2

## 前言

感觉大家应该都知道这款下载软件了。。。我就不再赘述了。

下面主要说下如何用 xmlrpc 调用这玩意开始下载。

关于官方文档里提到的诸如查看下载状态一类的先不在这里说了,因为以我的经验来看管理下载还是`AriaNg`好用,如何装这个也不说了...

(在往下读之前请确保你的 Aria2 能被 `AriaNg` 或类似的工具正常使用。

python 的话看官方文档里用 xmlrpc 好点,先贴下官方示例:

```python
# aria2.addUri(uris[, options[, position]])

import xmlrpclib
s = xmlrpclib.ServerProxy('http://localhost:6800/rpc')
s.aria2.addUri(['http://example.org/file'])
```

用pip装完xmlrpclib以后抄下来前两行就行,如果之前改了 rpc 端口别忘了抄的时候改一下。重点是这个`addUri`方法。它负责调用aria2开始下载。

忽略掉`secret`和`position`,`addUri`的第一个参数是带着一堆下载地址的数组,第二个可选参数是传给 Aria2 的参数列表。

参数列表是一个 dict,主要有用的大概是:

-   `max-connection-per-server`,也就是`-x`,设置分段下载功能。
-   `split`,设置 n 个线程。
-   `header`,这个不解释了。
-   `dir`,设置目录。如果不设置会下载到默认目录。注意如果使用相对目录,基准是`aria2c.exe所在目录`。
-   `out`,文件名。当然前面带一段目录也是可以的。(我没试过在第一个参数中包含多个链接的时候指定文件名。)
-   `referer`,也不解释了。其实在 header 里面指定 referer 也是可以的。

举个例子:

```python
#下载b站视频
import xmlrpclib
rpc = xmlrpclib.ServerProxy('http://localhost:6800/rpc')

#mid, title, aid = getinf()
options = {
    "max-connection-per-server": 5,
    "split": 5,
    "out": "/" + str(mid) + "/" + title + ".flv",
    #"dir":
    "referer": referer = "https://www.bilibili.com/video/av" + str(aid),
    #"header": ["User-Agent:xxx","Referer:xxx"]
    #注意header是array不是dict
    #错误示例:{"User-Agent": "xxx"}
}
rpc.aria2.addUri(, options)

```

addUri的返回值是gid,可以用在其他的一些诸如查看下载状态、控制暂停继续的函数里。如果添加不成功会直接报错。

完整的函数介绍请看https://aria2.github.io/manual/en/html/aria2c.html#rpc-interface

完整的参数在https://aria2.github.io/manual/en/html/aria2c.html#options

参数列表带两个-的就是option字典的键,比如`-d, --dir=<DIR>`等效为{"dir": \<DIR\>}。

先写这么多吧...

Hmily 发表于 2020-2-3 16:53

抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
页: [1]
查看完整版本: 申请会员ID:Froster