背景: 家里的老手机越狱后支持安装 Python 2.7 ,但是不支持 aria2 ( iOS 5.1 系统)
就想利用起来挂着下载点东西。试了下 Requests 包确实可以当作下载库使用,但是显示下载进度和断点续传是个问题。
Google 了一下看见 有用 Content-Length 判断下载进度的,但是有的 Response 不存在 Content-Length... 那迅雷等软件是如何做到显示下载进度的呢?
1
imldy 2022-01-25 18:05:08 +08:00
有些链接也没有显示下载进度吧,仅会显示已下载大小。
wget 和 curl 也不支持?或者类似的,没必要非 aria2 吧 |
2
ipwx 2022-01-25 18:20:22 +08:00
分类讨论,特殊处理。。。。
|
3
ch2 2022-01-25 18:22:58 +08:00
->有的 Response 不存在 Content-Length
流式下载你只能按提前知道的文件大小去推测进度,如果不知道那就显示一下当前已下载的大小替代进度条 ->下载进度和断点续传 一般来说是通过 range 请求头指定要下载的文件分片实现的,多线程下载跟断点续传也是这个方法 |
4
fgwmlhdkkkw 2022-01-25 18:26:47 +08:00
Content-Range
还有 Transfer-Encoding: chunked |
5
SleipniR 2022-01-25 19:00:14 +08:00 1
tqdm, clint.textui.progress, click.progressbar
|
6
black11black 2022-01-25 19:58:19 +08:00
话说问个题外话,idm 下载文件的时候会提示有的文件支持断点续传,有的文件不支持,从 http 角度讲后端如何实现断点续传的?
|
7
yaleyu 2022-01-25 21:26:27 +08:00
@black11black IDM 很神奇,不知道用了什么技术,在不支持 Range 的下载点(比如各大网赚盘)也可以实现分片下载。
|
8
ospider 2022-01-25 21:33:21 +08:00
我刚想说 system("aria2"),结果被你 ban 掉了
|
9
hicdn 2022-01-25 21:59:38 +08:00 via iPhone 1
安装 curl 最省事
|
10
black11black 2022-01-25 23:44:48 +08:00
@yaleyu 支持 range 与不支持 range 怎么理解?
|
11
2i2Re2PLMaDnghL 2022-01-26 09:43:51 +08:00
@black11black https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests
@yaleyu 先猜测一下是不是有非标准的 range 方式。比如 Youtube 就用了非标准的 range (采用 search 参数) |
12
Dawnnnnnn 2022-01-26 12:56:44 +08:00 2
可以看看支不支持 axel ,现在在 Python 里下载东西我都直接 os.system("axel -n 10 {url}"),多线程与断点续传都不用自己实现
|