3
26
2014
18

百度登陆方法及网盘 API 基本操作

本文来自依云's Blog,转载请注明。

本文只介绍流程,因此是以最方便试错的 shell 脚本为示例的。也就是一系列简单的 HTTP 请求,用什么语言都一样。

要实践本文中的例子,首先要确保系统上已经安装了如下软件:

  • curl: 命令行 HTTP 调试首选工具
  • jshon: 命令行 JSON 解析器。使用简单的栈式语法
  • json_pp: 这个命令行工具是 perl 自带的,把 JSON 数据格式化显示用的

首先把用户信息存到变量里去:

$ BDUSER=你的百度登陆名
$  PASS=你的百度登陆密码

访问一次百度,取得一个名为BAIDUID的 cookie。我们在此,以及以下所有 curl 命令中,都会使用-b-c选项告诉 curl 从当前目录下的「cookies」文件读取 cookie 数据,把接收到的 cookie 写到同一个文件里去。

$ curl -b cookies -c cookies http://www.baidu.com/ -sS -o /dev/null

获取 token:

$ TOKEN=$(curl -b cookies -c cookies -sS "https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&class=login&tt=$(date +%s860)&logintype=dialogLogin" | tr "'" '"' | jshon -e data -e token -u)
$ curl -b cookies -c cookies "https://passport.baidu.com/v2/api/?logincheck&token=$TOKEN&tpl=mn&apiver=v3&tt=$(date +%s)&username=$BDUSER&isphone=false"
{"errInfo":{ "no": "0" }, "data": { "codeString" : "", "vcodetype" : "" }}

使用用户信息登陆:

$ curl -b cookies -c cookies --compressed -sS 'https://passport.baidu.com/v2/api/?login' -H 'Content-Type: application/x-www-form-urlencoded' --data "staticpage=http%3A%2F%2Fpan.baidu.com%2Fres%2Fstatic%2Fthirdparty%2Fpass_v3_jump.html&charset=utf-8&token=$TOKEN&tpl=mn&apiver=v3&tt=$(date +%s083)&codestring=&safeflg=0&u=http%3A%2F%2Fpan.baidu.com%2F&isPhone=false&quick_user=0&logintype=basicLogin&username=$BDUSER&password=$PASS&verifycode=&mem_pass=on&ppui_logintime=57495&callback=parent.bd__pcbs__ax1ysj" | grep -F 'err_no=400032' > /dev/null

如果这条命令返回(即$?的值)为 0 则成功,否则失败。这是因为百度的登陆之后的页面会进行跳转,如果登陆成功那么跳转 URL 里包含err_no=400032,否则err_no是别的什么值。这个判断条件可能会变化,比如去年年底是err_no=40032时表示成功。

登陆成功之后就可以调用网盘 API 了。这部分比登陆的请求要好看许多。

先来获取一下网盘容量,也好确认我们确实登陆成功了:

$ curl -b cookies -c cookies 'http://pan.baidu.com/api/quota'
{"errno":0,"total":510341939200,"used":0}

这些请求直接在网页版里开着 Firebug 看就可以了。比如:

列根目录下的文件信息:

$ curl -b cookies -c cookies 'http://pan.baidu.com/api/list' | json_pp
$ curl -b cookies -c cookies 'http://pan.baidu.com/api/list?dir=/test' | json_pp

建立目录:

$ curl -b cookies -c cookies 'http://pan.baidu.com/api/create' -F path=/测试curl -F isdir=1 -F size= -F block_list='[]' -F method=post

参考资料

Category: 网络 | Tags: 百度 curl 网页 | Read Count: 18641
MatheMatrix 说:
Mar 26, 2014 10:43:18 PM

我平时用 python -m json.tool 一样的效果 hoho
对了 你用什么评论回复提醒啊,经过看到你在我 blog 评论我才装了个 Send email only on Reply to My Comment :-)

Avatar_small
依云 说:
Mar 26, 2014 11:00:35 PM

Python 那个命令太长啦,不过它会对键名排序,对比 JSON 文件时特别好用。

我这博客是 is-programmer.com 的站长用 RoR 写的啦,代码在 Github 上有,叫 Chito。

MatheMatrix 说:
Mar 27, 2014 09:42:40 AM

哦 对,看见下面的 WP Theme 我就下意识地以为是 WP 搭建的了……

MaskRay 说:
Apr 06, 2014 09:28:31 PM

json 的命令行解析美化感覺 jq 更iYiL好用

Avatar_small
依云 说:
Apr 06, 2014 09:37:01 PM

jq 是个 minilanguage 啊,何苦呢。jshon 搞不定就直接调用 Python 好了嘛。

MaskRay 说:
Apr 06, 2014 10:17:42 PM

比如 `jq .` 就是美化……`jq .data.token` 真是神器

Avatar_small
依云 说:
Apr 06, 2014 11:01:28 PM

json_pp 是绝大多数系统上都会自带的吧。
jq 相应于 jshon 的 -u 的操作怎么做?

Avatar_small
瘦箭头 说:
Jul 27, 2014 09:21:19 PM

仙子老大,使用用户信息登录那一步,为什么复制粘贴到终端上可以正确返回,放到脚本中再执行就返回错误吗呢?前面几步我都分别调试了,就这一步不行 :)

Avatar_small
依云 说:
Jul 27, 2014 09:28:36 PM

大概是脚本写错了吧……你对比一下脚本发送的数据和 curl 发送的数据呢?(curl 可以用 -v 选项来显示与服务器的交互信息)

Avatar_small
瘦箭头 说:
Jul 27, 2014 09:49:26 PM

我都改成差不多直接全复制到脚本了,还是不行 :( ~~~ 执行脚本是返回err_no=100023,单独执行返回0

Avatar_small
瘦箭头 说:
Jul 27, 2014 09:50:53 PM

那个tt时间字段有影响吗?

Avatar_small
瘦箭头 说:
Jul 27, 2014 09:54:59 PM

curl -b cookies -c cookies https://passport.baidu.com/v2/api/?logincheck&token=$TOKEN$&tpl=mn&apiver=v3&tt=$(date +%s)&username=$ACCOUNT&isphone=false
另外单独命令时,上面这个获取TOKEN时,有时可以,有时返回the fisrt two args should be string type:0,1!

Avatar_small
依云 说:
Jul 28, 2014 01:47:44 PM

不知道,慢慢尝试吧……

Avatar_small
瘦箭头 说:
Jul 28, 2014 01:51:03 PM

多谢老大 :) 现在不知道咋整好了,原因我还没明白。可能是用变量时引号的处理不对,单引、双引和不用这三个把我整晕了,原先只知道双引里的会被shell解释,单引的不解释,还有别的啥区别呀......

Avatar_small
依云 说:
Jul 28, 2014 06:26:03 PM

哦看出来了,你原来不懂 shell……上边那条命令都打错了的说…………

Avatar_small
瘦箭头 说:
Jul 29, 2014 08:48:10 AM

:P 啊?,这句又试了一下,可以执行呀,求指点弥筋啊老大

hello 说:
Dec 12, 2015 06:40:32 PM

请问楼主download和upload参数怎么写,TNKs!

Avatar_small
依云 说:
Dec 12, 2015 08:49:10 PM

这个你自己在 GitHub 上找一下相关代码吧。我已经很久没关注过百度网盘了。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

部分静态文件存储由又拍云存储提供。 | Theme: Aeros 2.0 by TheBuckmaker.com