今天就跟大家伙儿聊聊我最近捣鼓的这个“115解析器”的事儿。起因也简单,就是用115网盘的时候,有时候那下载速度,真跟那老牛拉破车似的,尤其不是会员的时候,那叫一个慢。而且有些时候,我想把一些文件批量弄出来,或者用其他下载工具接管,官方那个客户端操作起来总觉得不太顺手,限制也多。
我的折腾之路
所以我就寻思,能不能自己搞个小玩意儿,帮我把那些文件的真实下载地址给弄出来。这样一来,不就能用我自个儿喜欢的下载工具,或者写个脚本批量下载了嘛
第一步,肯定是研究115的网页版。 我先登录了自己的账号,然后打开浏览器的开发者工具,就是按F12那个。主要看啥?看我点下载按钮的时候,浏览器跟服务器之间都传了些啥数据。这一看不要紧,发现里面的道道还真不少。
一开始我以为能直接抓到下载链接,后来发现没那么简单。它那个链接藏得还挺深,而且经常会变。有时候拿到的链接,直接复制到下载工具里还不行,会提示没权限或者链接失效。
然后我就开始分析那些网络请求。 主要关注的是获取文件列表的请求,还有点击下载后触发的那一连串请求。我发现它会先验证你的登录状态,这个通常是通过cookie来实现的。我的小工具得能把我的cookie给带上,模拟我是已登录用户。
- 我试着把浏览器里的cookie复制出来,放到我的测试代码里,去请求那些接口。
- 然后就是找关键的接口,哪个是列出文件信息的,哪个是获取下载凭证或者临时下载链接的。
- 这个过程挺枯燥的,因为返回的数据有时候是一大串JSON,里面掺杂着各种ID、文件名、还有一些看不懂的参数。
最大的坎儿是它那个接口参数和返回数据的处理。 有些参数明显是加密或者编码过的,返回的数据有时候也需要特殊处理一下才能拿到有用的信息。我就只能一点点试,猜它可能是用了啥算法,或者查查网上有没有大佬分享过类似的经验。比如说,有些时间戳参数,或者一些特定的校验码,如果不对,服务器那边就不认。
我花了不少时间去对比正常的浏览器操作和我用代码模拟操作时,发送请求的差异,然后慢慢修正我的代码。有时候改一个参数,就能通了;有时候卡住好几天,没啥进展。
搞出来个啥
折腾了差不多一个多礼拜,算是弄出来一个能跑起来的初版。现在这个小工具能干啥?
我得先在浏览器里登录我的115账号,然后把关键的cookie信息提取出来,配置到我的工具里。 这个步骤暂时还没法完全自动化,毕竟115的登录机制也挺复杂的,有扫码有验证啥的。
然后,我把想要下载的115文件夹的ID或者分享链接的ID告诉我这个工具。 它就会去请求115的服务器,模拟浏览器操作,把那个文件夹里的文件列表给拉下来,包括文件名、大小这些基本信息。
最关键的一步,它会尝试去解析出每个文件的直接下载链接。 这一步是最麻烦的,因为115的策略一直在变。我目前的方法是模拟点击下载操作,然后从返回的数据里提取那个临时的、真实的下载地址。这个地址通常是有时效性的,也可能有一些限制。
用起来的效果嘛就是我可以把这些解析出来的链接,丢到IDM或者Aria2这些下载工具里去下载,速度上确实能比官方客户端不开会员的时候快不少,也能实现批量添加任务。这个解析器非常依赖115目前的接口规则,一旦115那边更新了我这边可能就得跟着调整代码,不然就失效了。所以也算是个持续维护的活儿。
为啥费这么大劲搞这个? 主要还是觉得官方给的途径有时候不太自由,限制也多。比如说,我想在我的NAS上自动备份115上的一些学习资料,官方客户端就很难满足这种自动化需求。自己搞个解析器,虽然麻烦点,但起码能按自己的想法来控制下载过程。而且捣鼓这些东西本身也挺有意思的,能学到不少网络请求、数据分析相关的知识。
这回实践过程虽然磕磕绊绊,但也算达到了我最初的目标。如果你也喜欢折腾,对这类东西感兴趣,那自己动手试试,还是挺有成就感的。