寻找并分析百度云的转存api(transfer)(图)
优采云 发布时间: 2021-08-11 23:27寻找并分析百度云的转存api(transfer)(图)
专列
❈Wang Yucheng,Python 中文社区专栏作家
博客:
❈
查找分析百度云的转账api
首先要有百度云盘账号,然后登录并用浏览器打开分享链接(这里以火狐为例)。 F12 打开控制台抓包。手动传输操作:选择所有文件->保存到网盘->选择路径->确定。建议点击【确定】前清除抓包记录,以便准确定位传输的api。这就是我们中学学过的【控制变量法】2333。
可以看到上图中捕获了一个带有“transfer”字样的post请求。这就是我们要找的传输api。下一个关键是分析它的请求头和请求参数,以便用代码模拟它。
点击它,然后点击右侧的【Cookies】可以看到请求头中的cookies。
Cookie 分析
因为dumping是登录后的操作,所以需要模拟登录状态,在请求头中设置登录相关的cookie。我们继续使用【控制变量法】,首先在浏览器中删除所有关于百度的cookies(在右上角的设置中,点击【隐私】删除cookies。具体方法为百度。)
然后登录,进入浏览器设置->隐私->右上角移除cookie,搜索“bai”观察cookie。这是所有与百度相关的cookie,一一删除并刷新百度页面一次,直到BDUSS被删除,刷新后登录退出,所以得出结论是与百度相关的cookie登录状态。
同样,删除STOKEN后,在进行转账操作时,也会提示重新登录。因此,这两个是dump操作中必须携带的cookies。
明确cookie情况后,可以构造请求头如下。
除了上面提到的两个cookies,其他的请求头参数可以参考手动dump时捕获的数据包的请求头。之所以保留这两个cookies作为参数,是因为cookies是有生命周期的,过期时需要更新。不同的帐户登录也有不同的 cookie。
参数分析
接下来分析参数,点击【Cookies】右侧的【Params】查看参数。如下:
上面的查询字符串中(也就是后面的参数?),除了我们需要填写的装箱的shareid、from、bdstoken,其余的可以不变,模拟请求的时候直接复制下来.
前两个与共享资源相关,bdstoken与登录账号相关。下面表单数据中的两个参数分别是资源共享用户网盘的目录和我们刚才点击保存的目录。
所以,我们需要填写的附加参数是:shareid、from、bdstoken、filelist和path。 bdstoken 可以通过手动转储和抓包找到。该路径根据您的需要定义,前提是您的网盘中有此路径。其他三个需要从分享链接中抓取。这个会在后面的【爬取shareid、from、filelist、发送请求和传输到网盘】部分说明。
参数的问题我搞清楚了,dump请求的url可以构造如下
抓取shareid、from、filelist,并发送请求转移到网盘
以上面的资源链接为例(可能随时被抓,不过没关系,其他链接的结构也是一样的),我们用浏览器手动访问,F12打开控制台并先分析源码,看看我们想要什么资源信息在哪里。控制台有搜索功能,直接搜索“shareid”。
四个shareid定位,前三个与资源无关,是其他共享资源,最后一个位于html文件的最后一个标签块。双击后就可以看到格式化后的js代码了,可以发现我们想要的信息都在里面了。以下摘录:
你可以看到这两行
yunData.PATH 只指向一个路径信息,完整的文件列表可以从yunData.FILEINFO中提取出来,它是一个json,列表中的信息是Unicode编码的,所以在控制台看不到中文,使用Python 代码 只需访问并获取输出。
如果直接使用请求,会得到404错误。可能是你需要构造请求头参数,不能直接请求。博主为了节省时间,直接用selenium的webdriver获取了两次,收到了返回信息。第一次get没有cookie,但是百度会给你返回一个BAIDUID,第二次get就可以正常访问了。
yunData.FILEINFO的结构如下,可以复制粘贴进去看更清楚。
清除这三个参数的位置,我们就可以用正则表达式提取出来了。代码如下:
爬取这三个参数后,就可以调用前面的传输方法进行传输了。