迅雷地址 thunder://*****的下载文件大小获取。转自问答分类,那边人好少。。

2017-06-18 01:44:54 +08:00
 sunsulei

各位大佬好:

我这边去网上抓了几十万条的 thunder://xxxxxxx 的链接,现在想获取对应这个链接的文件大小。

现在的解决方案是去 http://lixian.xunlei.com 用 httpClient 模拟登陆然后通过新建任务来获取到文件大小,有个问题是大部分的链接返回的大小全是 0,抓了一个多星期了才完成了一万多条的数据。

迅雷客户端新建任务贴地址那里也会经常出现文件大小 0 的情况,但是点击下载后就会出现大小数量,请问我该怎么抓这个数据呢?

尝试过 wireShark 来抓,发现来往请求不知道是加密还是直接传的流,没整明白。望各位大佬赐教。

3821 次点击
所在节点    程序员
9 条回复
just1
2017-06-18 01:46:31 +08:00
base64 可以得到真实地址吧
sunsulei
2017-06-18 01:48:51 +08:00
@just1 真实地址得到了没用啊,基本上都是电影的链接(正经电影),都是 ftp 的,而且都是死链,全指望着迅雷了。
NullMan
2017-06-18 02:12:24 +08:00
迅雷链接是 base64(xx + infohash + xx)的值,而迅雷是有种子库的,链接是带 infohash 的,通过 http 请求迅雷种子库,下载种子文件,然后解析种子文件,种子文件里有文件大小的字段。几年前我玩过。
NullMan
2017-06-18 02:16:20 +08:00
刚 base64_decode 了下,看样子迅雷链接不仅 base64_encode 磁力链接了,还 encode ftp 链接... 没办法咯。
sunsulei
2017-06-18 02:21:35 +08:00
@NullMan 感谢大佬。
我也知道是 base64 的结果,能不能通过模拟迅雷客户端的下载请求得到文件大小呢?
xifangczy
2017-06-18 03:21:30 +08:00
迅雷离线文件下载地址里就包含文件大小
http://gdl.lixian.vip.xunlei.com/download?fid=BTdO/+1MLIgVGnLeDr4vh+xN77FMiqosAAAAAIN8EOOvYw/FpzFUajsRUFQJvKAm&………………

fid 里就包含有大小

```
import struct
def parse_fid(fid):
cid, size, gcid = struct.unpack("<20sq20s", fid.decode("base64"))
return cid.encode("hex").upper(), size, gcid.encode("hex").upper()
print parse_fid("BTdO/+1MLIgVGnLeDr4vh+xN77FMiqosAAAAAIN8EOOvYw/FpzFUajsRUFQJvKAm")
```

输出
('05374EFFED4C2C88151A72DE0EBE2F87EC4DEFB1',749374028,'837C10E3AF630FC5A731546A3B11505409BCA026')

749374028 就是大小
strict
2017-06-18 16:04:31 +08:00
6666
sunsulei
2017-06-18 19:09:34 +08:00
@xifangczy 感谢提供新思路。

http://imgur.com/FO1Y4D6

我的方法是这样获取文件大小的,如果这样获取的是 0 的话,基本上提交离线任务也会一直下载中状态。所以此方案也不行。。
sunsulei
2017-06-18 19:10:17 +08:00
[Imgur]( )

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/369228

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX