对百度网盘API的一些分析(非OAuth)

2013-09-16 20:33:18 +08:00
 yangff
这 **不是** 使用OAuth认证授权的百度网盘API。

先上github,https://github.com/Yangff/node_pcsapi
首先这是个坑爹玩意(我自己这么认为的),之所以这么说是因为我被jugglingdb 这奇葩玩意恶心到了。如果要用的话,我想你只需要pcsapi.js和baiduapi.js的内容就行了,一看就懂很容易的……

然后来说说API,因为手中条件有限,所有所有的API都是针对
http://pan.baidu.com
结合开发者的PCS api手册分析得到的(因为他们的接口几乎一样……)

直接使用百度的API,需要用到baidu的cookie(不要session……真神奇)。然后根据相关的RestfulAPI直接请求就行了。API列表可以抓包,或者在源代码里面搜索RestfulAPI.XXX,XXX可以在源代码里面找,或者直接看这个https://github.com/Yangff/node_pcsapi/blob/master/apilist.txt
删除有点问题,因为删除用到了一个Token,这个Token似乎是直接塞在pan.baidu.com下一个script标签里面的……

主要写的还是baidu登录的验证……那个比较蛋疼,登录的相关流程我写在这里了:
https://github.com/Yangff/node_pcsapi/blob/master/baidulogin.md

最后写完发现我特么应该针对手机客户端抓包的……

最后,最后,请允许我黑jugglingdb ,jugglingdb-mysql 和 requestify,这也是我为什么没有直接打包成package的原因之一,另一个原因是我根本不会(雾)。请不要尝试更换这三个东西……代码我都改过,原版的都有问题,我也懒得去gituhb上提了,都是泪。这也是我为什么说最好不要管除了pcsapi.js和baiduapi.js以外的文件……另一方面我相信我的代码风格会严重破坏你现有的代码可维护性。

另外说一句,百度可能会要求你输入验证码,所以我在baiduapi里面塞了一个http。
使用的时候需要baiduapi.start(port),如果出现验证码要求,访问这个地址:port,点击验证码输入……
不过也因此,如果出现异常程序不会自动退出……如果卡太久大概是异常了……

还有一个问题想要问一下,
JSON.parse的时候Failed parsing expected JSON response, returned raw response
然后我输出来看,似乎是百度在返回的时候把“"”写成“'”了,但是我替换之后,实际上JSON确实成功转变成对象了……可是还报这个错,但是不影响登录结果,Cookie也能取到……这是为啥。
19138 次点击
所在节点    分享创造
26 条回复
yangff
2013-09-16 20:36:18 +08:00
对了,我还要黑一下百度PCS的rapidupload,特么,MD5是hex的,CRC用数字,还提示md5错误,多大仇。
sanddudu
2013-09-16 20:39:54 +08:00
顺毛
msg7086
2013-09-16 21:58:45 +08:00
@yangff 啥?

/rest/2.0/pcs/file?method=rapidupload&access_token=喵喵喵&path=/apps/喵/喵喵喵&content-length=228842501&content-md5=f8ff63ffa65d2c812334bd337e361e5d&slice-md5=54abccf0eaec7b777cce183c5e86bd5e&content-crc32=25de6716

这里的CRC32,其实不填也能秒,因为有一次我用cksfv算crc的时候解析字符串错误,填了奇怪的符号进去,结果竟然秒成功了……

不知道从Pan API能不能这么做。
msg7086
2013-09-16 22:03:12 +08:00
顺便md5错误其实挺正常。我本地有2个文件,上传完以后再当场秒,结果竟然秒不到……

从API拿文件信息里的md5是正确的,但是rapidupload死活说找不到md5我顿时就跪了
yangff
2013-09-16 22:20:31 +08:00
@msg7086 ><真是无情,反正这就是坑爹。
我说的md5错误是说,crc错了,然后报md5错误……
至于pcs那里的rapidupload不填crc行不行我不清楚……反正网盘那里是要正确的。
yangff
2013-09-16 22:22:11 +08:00
另外,Pan的api很多自相矛盾的地方,比如content-crc32,这是文档里写的,contentcrc32这是他实际用的……
yangff
2013-09-16 22:24:14 +08:00
msg7086
2013-09-16 22:51:59 +08:00
@yangff 这个是4楼说的bug对应的错误样本啊。另外access_token是api token。贴出来我只是举个栗子而已……

反正我还是偏向于走正常的API而不是抓包或者逆向。实在没有的功能 (比如抓下载链接或者转存) 才考虑用奇怪的API来做。
yangff
2013-09-17 10:03:33 +08:00
@msg7086 api拿到的外链会泄漏ak。个人倒没有什么问题。做文件存储不行。
taobeier
2013-09-17 12:31:22 +08:00
辛苦了
msg7086
2013-09-17 17:29:09 +08:00
@yangff 先把整个apps目录共享出来,然后从wap端抓下载地址,然后拿第一跳302的Location就行了。
yangff
2013-09-17 20:58:35 +08:00
@msg7086 ……这是靠共享拿外链吧,怕被暴菊
@orzFly 快来献身说法。
msg7086
2013-09-17 21:08:04 +08:00
@yangff 何菊之爆?不懂
yangff
2013-09-17 21:36:23 +08:00
@msg7086 随手举报……幸福一生……
msg7086
2013-09-18 22:03:11 +08:00
@yangff 你可以试试看 http://lc.7086.in/set.php?sid=20 我觉得一般人应该拿不到原始账号才对……
yangff
2013-09-18 22:27:04 +08:00
@msg7086 访问不了0 0
yangff
2013-09-18 22:34:39 +08:00
moonlightheng
2013-09-27 10:23:10 +08:00
新手求指教啊,用秒传参数没太懂,content-md5=f8ff63ffa65d2c812334bd337e361e5d&slice-md5=54abccf0eaec7b777cce183c5e86bd5e&content-crc32=25de6716 这三个参数怎么从文件获得呢,有没有工具类,最好是java的
yangff
2013-09-27 10:24:57 +08:00
byniu
2013-10-09 18:15:44 +08:00
@msg7086 求教,slice-md5是什么MD5,怎么算出来的?

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

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

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

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

© 2021 V2EX