各位大佬好:
我这边去网上抓了几十万条的 thunder://xxxxxxx 的链接,现在想获取对应这个链接的文件大小。
现在的解决方案是去 http://lixian.xunlei.com 用 httpClient 模拟登陆然后通过新建任务来获取到文件大小,有个问题是大部分的链接返回的大小全是 0,抓了一个多星期了才完成了一万多条的数据。
迅雷客户端新建任务贴地址那里也会经常出现文件大小 0 的情况,但是点击下载后就会出现大小数量,请问我该怎么抓这个数据呢?
尝试过 wireShark 来抓,发现来往请求不知道是加密还是直接传的流,没整明白。望各位大佬赐教。
1
just1 2017-06-18 01:46:31 +08:00 via Android
base64 可以得到真实地址吧
|
2
sunsulei OP @just1 真实地址得到了没用啊,基本上都是电影的链接(正经电影),都是 ftp 的,而且都是死链,全指望着迅雷了。
|
3
NullMan 2017-06-18 02:12:24 +08:00
迅雷链接是 base64(xx + infohash + xx)的值,而迅雷是有种子库的,链接是带 infohash 的,通过 http 请求迅雷种子库,下载种子文件,然后解析种子文件,种子文件里有文件大小的字段。几年前我玩过。
|
4
NullMan 2017-06-18 02:16:20 +08:00
刚 base64_decode 了下,看样子迅雷链接不仅 base64_encode 磁力链接了,还 encode ftp 链接... 没办法咯。
|
6
xifangczy 2017-06-18 03:21:30 +08:00 2
迅雷离线文件下载地址里就包含文件大小
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 就是大小 |
7
strict 2017-06-18 16:04:31 +08:00 via iPhone
6666
|
8
sunsulei OP @xifangczy 感谢提供新思路。
http://imgur.com/FO1Y4D6 我的方法是这样获取文件大小的,如果这样获取的是 0 的话,基本上提交离线任务也会一直下载中状态。所以此方案也不行。。 |
9
sunsulei OP |