V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
yangff
V2EX  ›  分享创造

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

  •  
  •   yangff · 2013-09-16 20:33:18 +08:00 · 19313 次点击
    这是一个创建于 4117 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这 **不是** 使用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也能取到……这是为啥。
    26 条回复    1970-01-01 08:00:00 +08:00
    yangff
        1
    yangff  
    OP
       2013-09-16 20:36:18 +08:00
    对了,我还要黑一下百度PCS的rapidupload,特么,MD5是hex的,CRC用数字,还提示md5错误,多大仇。
    sanddudu
        2
    sanddudu  
       2013-09-16 20:39:54 +08:00
    顺毛
    msg7086
        3
    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
        4
    msg7086  
       2013-09-16 22:03:12 +08:00
    顺便md5错误其实挺正常。我本地有2个文件,上传完以后再当场秒,结果竟然秒不到……

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

    反正我还是偏向于走正常的API而不是抓包或者逆向。实在没有的功能 (比如抓下载链接或者转存) 才考虑用奇怪的API来做。
    yangff
        9
    yangff  
    OP
       2013-09-17 10:03:33 +08:00 via Android
    @msg7086 api拿到的外链会泄漏ak。个人倒没有什么问题。做文件存储不行。
    taobeier
        10
    taobeier  
       2013-09-17 12:31:22 +08:00
    辛苦了
    msg7086
        11
    msg7086  
       2013-09-17 17:29:09 +08:00
    @yangff 先把整个apps目录共享出来,然后从wap端抓下载地址,然后拿第一跳302的Location就行了。
    yangff
        12
    yangff  
    OP
       2013-09-17 20:58:35 +08:00
    @msg7086 ……这是靠共享拿外链吧,怕被暴菊
    @orzFly 快来献身说法。
    msg7086
        13
    msg7086  
       2013-09-17 21:08:04 +08:00
    @yangff 何菊之爆?不懂
    yangff
        14
    yangff  
    OP
       2013-09-17 21:36:23 +08:00
    @msg7086 随手举报……幸福一生……
    msg7086
        15
    msg7086  
       2013-09-18 22:03:11 +08:00
    @yangff 你可以试试看 http://lc.7086.in/set.php?sid=20 我觉得一般人应该拿不到原始账号才对……
    yangff
        16
    yangff  
    OP
       2013-09-18 22:27:04 +08:00
    @msg7086 访问不了0 0
    moonlightheng
        18
    moonlightheng  
       2013-09-27 10:23:10 +08:00
    新手求指教啊,用秒传参数没太懂,content-md5=f8ff63ffa65d2c812334bd337e361e5d&slice-md5=54abccf0eaec7b777cce183c5e86bd5e&content-crc32=25de6716 这三个参数怎么从文件获得呢,有没有工具类,最好是java的
    yangff
        19
    yangff  
    OP
       2013-09-27 10:24:57 +08:00 via Android   ❤️ 1
    byniu
        20
    byniu  
       2013-10-09 18:15:44 +08:00
    @msg7086 求教,slice-md5是什么MD5,怎么算出来的?
    yangff
        21
    yangff  
    OP
       2013-10-09 18:35:49 +08:00 via Android   ❤️ 1
    msg7086
        22
    msg7086  
       2013-10-09 18:35:59 +08:00   ❤️ 1
    loveshouhu
        23
    loveshouhu  
       2014-02-20 17:14:48 +08:00
    请注意,如果有验证码……恭喜悲剧再见。 这句话好欠啊。。23333
    yangff
        24
    yangff  
    OP
       2014-02-20 20:04:53 +08:00
    @loveshouhu 登录验证码我处理了。下载自己网盘里面的东西是不用验证码的。
    loveshouhu
        25
    loveshouhu  
       2014-02-20 23:16:30 +08:00
    @yangff 我就在想,为什么百度不能提供一套针对个人使用自己网盘的api。。。
    yangff
        26
    yangff  
    OP
       2014-02-20 23:27:37 +08:00
    @loveshouhu pcs除了只能在工作目录使用外基本满足要求,其他的可以直接用百度网盘在web上的api,其实挺清晰的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1060 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 19:58 · PVG 03:58 · LAX 11:58 · JFK 14:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.