如何配置 Aria2 來進行檔案下載
什麼是 Aria2?
aria2 是一個輕量級的多協議和多源命令列下載實用程式。 它支援 HTTP / HTTPS,FTP,SFTP,BitTorrent 和 Metalink。 aria2 可以通過內建的 JSON-RPC 和 XML-RPC 介面進行操作。
上面是官網對 Aria2 的介紹,講的直白一點,Aria2 就是一個下載工具,它最大的優勢就是下載速度快,基本可以達到你網路頻寬的滿速,同時支援的協議很多,不管你的下載連結是以 http,https 開頭,還是以 magent 開頭的磁力連結以及 BT 種子,它都可以下載。
如何在 Mac 上配置 Aria2
安裝 Aria2
如果你沒有安裝包管理工具 Homebrew,那麼先在終端輸入下面的命令安裝:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然後在終端輸入下面的命令安裝Aria2:
brew install aria2
配置 Aria2
安裝完成後,我們需要建立一個配置檔案 aria2.conf
,將其放在 ~/.aria2
資料夾中。依次在終端輸入以下命令:
cd ~ mkdir .aria2 cd .aria2 touch aria2.conf
其中,命令cd
的作用是切換路徑,mkdir
的作用是建立資料夾,touch
的作用是新建檔案。 然後開啟 Finder,同時按下 command
、shift
、G
,進入資料夾:~/.aria2
(以 .
開頭的資料夾為隱藏資料夾,如果想直接從 Finder 中找到這個資料夾,需要先同時按下 command
、shift
、.
顯示隱藏檔案),就可以看到配置檔案 aria2.conf
,利用文字編輯器開啟,將下面的資訊複製進去:
## '#' 開頭為註釋內容, 選項都有相應的註釋說明, 根據需要修改 ## ## 被註釋的選項填寫的是預設值, 建議在需要修改時再取消註釋 ## ## 檔案儲存相關 ## # 檔案的儲存路徑 (可使用絕對路徑或相對路徑), 預設: 當前啟動位置 dir=/Users/mofiter/Downloads # 啟用磁碟快取, 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 max-concurrent-downloads=5 # 同一伺服器連線數, 新增時可指定, 預設:1 max-connection-per-server=5 # 最小檔案分片大小, 新增時可指定, 取值範圍 1M -1024M, 預設:20M # 假定 size=10M, 檔案為 20MiB 則使用兩個來源下載; 檔案為 15MiB 則使用一個來源下載 min-split-size=10M # 單個任務最大執行緒數, 新增時可指定, 預設:5 split=5 # 整體下載速度限制, 執行時可修改, 預設:0 #max-overall-download-limit=0 # 單個任務下載速度限制, 預設:0 #max-download-limit=0 # 整體上傳速度限制, 執行時可修改, 預設:0 #max-overall-upload-limit=0 # 單個任務上傳速度限制, 預設:0 #max-upload-limit=0 # 禁用 IPv6, 預設:false disable-ipv6=true ## 進度儲存相關 ## # 從會話檔案中讀取下載任務 input-file=/usr/local/Cellar/aria2/aria2.session # 在 Aria2 退出時儲存 ` 錯誤 / 未完成 ` 的下載任務到會話檔案 save-session=/usr/local/Cellar/aria2/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=<TOKEN> # 設定的 RPC 訪問使用者名稱, 此選項新版已廢棄, 建議改用 --rpc-secret 選項 #rpc-user=<USER> # 設定的 RPC 訪問密碼, 此選項新版已廢棄, 建議改用 --rpc-secret 選項 #rpc-passwd=<PASSWD> ## BT/PT 下載相關 ## # 當下載的是一個種子(以.torrent 結尾) 時, 自動開始 BT 任務, 預設:true #follow-torrent=true # BT 監聽埠, 當埠被遮蔽時使用, 預設:6881-6999 listen-port=51413 # 單個種子最大連線數, 預設:55 #bt-max-peers=55 # 開啟 DHT 功能, PT 需要禁用, 預設:true enable-dht=false # 開啟 IPv6 DHT 功能, PT 需要禁用 #enable-dht6=false # DHT 網路監聽埠, 預設:6881-6999 #dht-listen-port=6881-6999 # 本地節點查詢, PT 需要禁用, 預設:false #bt-enable-lpd=false # 種子交換, PT 需要禁用, 預設:true enable-peer-exchange=false # 每個種子限速, 對少種的 PT 很有用, 預設:50K #bt-request-peer-speed-limit=50K # 客戶端偽裝, PT 需要 peer-id-prefix=-TR2770- user-agent=Transmission/2.77 # 當種子的分享率達到這個數時, 自動停止做種, 0 為一直做種, 預設:1.0 seed-ratio=0 # 強制儲存會話, 即使任務已經完成, 預設:false # 較新的版本開啟後會在任務完成後依然保留.aria2 檔案 #force-save=false # BT 校驗相關, 預設:true #bt-hash-check-seed=true # 繼續之前的 BT 任務時, 無需再次校驗, 預設:false bt-seed-unverified=true # 儲存磁力連結元資料為種子檔案(.torrent 檔案), 預設:false bt-save-metadata=true
將其中的 dir
改為自己想要儲存下載檔案的路徑。
開啟 Aria2
在終端輸入下面命令即可啟用(注意更改其中的 xxx 為你自己的電腦使用者名稱):
aria2c --conf-path="/Users/xxx/.aria2/aria2.conf" -D
讓 Aria2 開機自啟
如果你不想每次用的時候都要在終端輸入上面的命令開啟,你可以將其設為開機自啟,這樣就方便多了。在終端依次輸入下列命令:
cd ~/Library/LaunchAgents
touch aria2.plist
然後開啟 Finder,同時按下 command
、shift
、G
,進入資料夾: ~/Library/LaunchAgents
,用文字編輯器開啟我們剛才建立的檔案aria2.plist
,將下面的資訊複製進去:
<?xml version="1.0"encoding="utf-8"?>
<!DOCTYPE plist PUBLIC"-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true />
<key>RunAtLoad</key>
<true />
<key>Label</key>
<string>aria2</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/aria2c</string>
</array>
<key>WorkingDirectory</key>
<string>/Users/mofiter/Downloads</string>
</dict>
</plist>
將<array></array>
中的值改為自己電腦上 aria2c 命令的路徑,可以在終端輸入which aria2c
檢視,將WorkingDirectory
後面的<string></string>
中的值改為自己的下載路徑。然後在終端依次輸入下列命令:
chmod 644 aria2.plist
launchctl load aria2.plist
launchctl start aria2
這樣,開機自啟就設定成功了,如果你重新啟動 Mac,你會發現在活動監視器裡面程序 aria2c 是存在的。
如何在 Windows 上配置 Aria2
安裝 Aria2
官方沒有給出 Windows 版本的安裝包,需要自己利用原始碼 build,這對一般人來說太難了,所以很多網友自制了懶人版,我這裡選用青小蛙的版本,在此表示感謝,由於他給的下載地址是百度雲盤,我擔心資源失效,所以將其另存到了 coding.net,可以點此下載,下載完之後解壓並將其儲存到一個你常用的軟體安裝路徑即可,並不需要安裝什麼。
配置 Aria2
在解壓後的資料夾裡面有一個config.conf
檔案,用文字編輯器開啟,然後根據自己的需要修改相應選項,這裡可能需要修改的是dir=./downloads
,是下載檔案的儲存路徑,如果你不修改,下載的檔案將會儲存在你解壓的資料夾裡面的downloads
資料夾裡面。
開啟 Aria2
點選資料夾裡面的aria2啟動.VBS
,即可開啟 Aria2,這時你去工作管理員的程序可以看到名為aria2c.exe
的程序。
讓 Aria2 開機自啟
每次開機之後都要重新開啟上面的檔案來啟動 Aria2 也有點煩,你可以將其設為開機自啟。Windows 上面將一個程式設為開機自啟有兩種方式,一種是和登入使用者繫結,即使用者登入時才啟動,假如你電腦上有 2 個使用者 A 和 B,你給 A 設定了一個開機啟動的任務,那麼當你電腦開機後是 B 使用者登入時,這個任務就不會啟動。某個使用者的啟動資料夾為:C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
,這裡的xxx
為使用者名稱,然後給前面的aria2啟動.VBS
檔案建立一個快捷方式,將這個快捷方式放到這個啟動資料夾裡面就可以了,注意不要直接將aria2啟動.VBS
檔案放到資料夾,因為此檔案在啟動 Aria2 時用的是相對路徑,如果你將此檔案放到啟動資料夾,它將找不到 Aria2 程式。第二種是和登入使用者無關的,不管登入哪個使用者都能啟動,這個啟動資料夾是:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
,將建立的aria2啟動.VBS
檔案的快捷方式放到此資料夾就可以了。設定了開機自啟之後,你關機重啟電腦仍然可以在工作管理員裡看到aria2c.exe
程序。 注意: AppData 和 ProgramData 資料夾都是隱藏資料夾,請先選中檢視隱藏的專案。
如何使用 Aria2 下載檔案
當你在 Mac 或者 Windows 上安裝配置好 Aria2 時,你就可以通過其下載檔案了。Aria2 有命令列,web UI,GUI 三種使用方式,這裡推薦 web UI(命令列太麻煩,GUI 也不是太穩定,而 web UI 使用不區分平臺,很方便)。可以選擇的 web UI 有 Aria2 WebUI、Aria2 Web 控制檯、Aria2管理 等,我這裡選擇 Aria2 WebUI。開啟網站後,在設定→連線設定
裡面將主機改為127.0.0.1
,埠改為6800
,然後應該就會提示連線成功。
如果仍然提示無法連線到 Aria2 伺服器,請檢查自己在之前配置檔案aria2.conf
(Mac)或config.conf
(Windows)中的埠是不是 6800 以及自己電腦是不是設定了代理。 連線成功後,點選新增→使用連結
,將你要下載的檔案地址輸入進去就可以下載了(可以用這個連結 https://coding.net/u/mofiter/p/public_files/git/raw/master/go_to_bottom_button.png 測試,是一張 2KB 大小的 PNG 格式的圖片)。
通過 JSON-RPC 介面下載檔案
當檔案比較多的時候,我們不可能每次都複製一個檔案的下載地址進來手動新增下載任務,這時就能用到 Aria2 的 JSON-RPC 介面。RPC(Remote Procedure Call)是遠端過程呼叫的意思,你可以在你的程式(Python、JavaScript、Java 等等)中建立一個網路請求,來呼叫我們之前配置好的 Aria2 下載檔案。
如何在 Python 中利用 JSON-RPC 傳送請求下載檔案
假設我們要下載的檔案的下載地址為 https://coding.net/u/mofiter/p/public_files/git/raw/master/go_to_bottom_button.png,我們要將其儲存的路徑為 D:\Downloads
,要儲存的檔名為 button.png
,那麼我們可以這樣寫:
import requests
import json
url = 'http://127.0.0.1:6800/jsonrpc'
download_url = "https://coding.net/u/mofiter/p/public_files/git/raw/master/go_to_bottom_button.png"
json_rpc = json.dumps({
'id': '',
'jsonrpc': '2.0',
'method': 'aria2.addUri',
'params': [[download_url], {'dir': 'D:\Downloads', 'out': 'button.png'}]
})
response = requests.post(url=url, data=json_rpc)
print(response)
params
是一個數組,裡面的第一個陣列元素裡面放的是下載路徑,而第二個字典元素裡面的 dir
表示檔案的儲存路徑,out
表示檔名。請求成功後會返回一個 json,裡面包含id
、jsonrpc
、result
等欄位。然後你去 D:\Downloads
就能找到我們要的檔案 button.png
了,當然如果你要下載的檔案很大時,它可能還在下載,這時會有一個同名的以 .aria2
結尾的檔案,當下載結束後這個檔案就會消失。
如何在 JavaScript 中利用 JSON-RPC 傳送請求下載檔案
假設我們要下載的檔案地址,檔案儲存地址以及檔名和上面的一樣,那我們可以這樣寫:
url = 'http://127.0.0.1:6800/jsonrpc'
download_url = "https://coding.net/u/mofiter/p/public_files/git/raw/master/go_to_bottom_button.png"
var json_rpc = {
id:'',
jsonrpc:'2.0',
method:'aria2.addUri',
params:[
[download_url],
{
dir:"'D:\Downloads'",
out:"button.png"
}
]
};
$.ajax({
url:url,
type:'POST',
crossDomain:true,
processData:false,
data:JSON.stringify(json_rpc),
contentType: 'application/json',
success:function(response){
console.log(response);
}
});
JSON-RPC 可以用來做什麼
理論上,只要是網際網路上你能找到下載地址的音樂,視訊,圖片等等任何東西,你都可以通過這種介面呼叫的方式來下載。使用比較廣泛的有百度雲盤匯出下載 https://chrome.google.com/webstore/detail/baiduexporter/jgebcefbdjhkhapijgbhkidaegoocbjj,打不開的看這裡 http://chromecj.com/accessibility/2018-04/1397/download.html。我也寫了幾個油猴指令碼,可以用來批量下載網易雲課堂的免費課程、批量下載中國大學 MOOC 的課程、批量下載 Udemy 的訂閱課程,歡迎體驗。 (正文完)
參考文章: