百度文库手机版通信协议分析
下面表格中的操作的HTTP请求头中的HOST都必须是appwk.baidu.com。都是以POST的形式请求。POST的数据的格式都是:
request={"Bdi_bear":"UMTS","BDUSS":""}
其中BDUSS是登录时服务器发回的Token。但多数操作并不要求登录,这个BDUSS可以为空。
操作 | URL | 注 | 返回数据 |
下载排行 | http://wenku.n.shifen.com/?rt=dl&type=1&pn=0&rn=10 | type=0: 特别推荐 type=1: 下载排行 type=2: 上升最快 | {"result":{"tn":60,"count":10},"content" :[{"doc_id":"5314d779168884868762d60b" ,"title":"\u600e\u6837\u624d\u80fd\u6000\u5b55" ,"size":"44032","download_count":"3012", "value_count":"1262","value_average":"8","ext_name":".doc"}, |
分类浏览 | http://wenku.n.shifen.com/?rt=cl&pn=0&rn=0 | {"result":{"tn":15,"count":10},"content" :[{"cname":"\u5c0f\u8bf4","cid":"79","ishot":"1"}, {"cname":"\u60c5\u611f","cid":"133","ishot":"0"}, {"cname":"\u52b1\u5fd7\/\u54f2\u7406","cid":"134","ishot":"1"}, {"cname":"\u5065\u5eb7","cid":"128","ishot":"0"}, {"cname":"\u6563\u6587\u968f\u7b14","cid":"93","ishot":"0"}, {"cname":"\u6c42\u804c\/\u804c\u573a","cid":"127","ishot":"1"}, {"cname":"\u5e7d\u9ed8","cid":"140","ishot":"0"}, {"cname":"\u79d1\u666e","cid":"135","ishot":"0"}, {"cname":"\u7f8e\u5bb9\/\u5851\u8eab","cid":"130","ishot":"1"}, {"cname":"\u8bd7\u8bcd","cid":"141","ishot":"0"}]} | |
分类书籍 | http://wenku.n.shifen.com/?rt=cv&cid=79&od=0&pn=0&rn=10 | {"result":{"tn":59966,"count":15},"content": [{"doc_id":"9b6ff4fc04a1b0717fd5dd83" ,"title":"\u7ecf\u5178\u7b11\u8bdd\u80fd\u5fcd\u52305\u4e2a\", "value_count":"1404","value_average":"8", "download_count":"768","size":"34816","ext_name":".doc"}, | |
书籍详情 | {"content":{"tag_str":"", "summary":"\u6c5f\u5927\u5927\u7684\u597d\u4e66", "price":"0","cid":"538","ext_name":".txt"}} | ||
在线阅读 | http://wenku.n.shifen.com/?rt=dc&doc_id=abc6e50016fc700abb68fcfa&pn=0 | 返回纯文本,如果是DOC和PPS也都转成TXT返回,图片、格式全丢失。 | {"txt_size":3778,"content":["\u6c5f\u5357\u8bf4\u4ed6\u7684\u300a\u7f25\u7f08\u5f55\u300b \r\n\u5f92\u5f1f\u6c99\u6f20 \r\n0\u4f4d\u7c89\u4e1d \r\n 1\u697c\r\n\r\n\u6211\…… |
书籍下载 | http://wenku.n.shifen.com/?rt=dc&doc_id=abc6e50016fc700abb68fcfa | 要求BDUSS不为空,dt参数表示文件的类型,0为原始类型,1为TXT类型 | 书籍的二进制流 |
下载书籍是要登录的,因为书籍是要有积分才能下载的。
登录的认证过程是在另一台服务器上完成的。
认证API的地址是:http://220.181.112.194/passport/?login HTTP请求头中的HOST是wappass.baidu.com。这个请求也要POST。POST的数据是:
tpl=wkc&cip=127.0.0.1&login_username=xxx&login_loginpass=ooo&phoneid=000000000000000&login_verifycode=&login_bdverify=&login_bdstoken=
这个过程中用户名、密码都是明文。(网页版的登录网页是TLS加密的)
成功登录的返回结果是:
<?xml version="1.0" encoding="utf-8" ?> <login_succ> <param key="ssid" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" /> <bduss>xxxxmJzfjRnSWRuVERQUFRYRmR0VUNWxxxxxxxxRTJveHR2bjFMODktLUJVUnBPQUFBQUFBJCQAAAAAAAAAAAokNx~iYicAbmFua2V6aGlzaGkAAAAAAAAAAAAAAAAAAAAAAAAAAADgiuV4AAAAAOCK5XgAAAAAcF1CAAAAAAAxMC4zNi4yM4HE8k2BxPJNb</bduss> </login_succ> 这里的bduss就是可以用来下载图书了,ssid不知道是哈,按位数看可能是个GUID,可能与用户绑定,所以我xx了。但是如果百度的文库平台能这么简单就被搞定的话,也太小看百度了。先往下看。
登录失败的返回结果是:
<login_fail> <reason id="4"> <![CDATA[ 登录密码错误,请重新登录 ]]> </reason> <bdNeedVerify /> <bdVcodeString /> <bdBdstoken /> <bdTime /> </login_fail> id=2表示用户不存在。id=6表示验证码错误
有时(具体逻辑由服务器控制,可能密码正确的时候也会)会要求用户输入验证码:
<?xml version="1.0" encoding="utf-8" ?> <login_fail> <reason id="204"> <![CDATA[ 请输入验证码 ]]> </reason> <bdNeedVerify>1</bdNeedVerify> <bdVcodeString>3030313031393631303835353435303870617373706F72743133303737353632313630343031303130338559258195D169FA820791E1CC77719D</bdVcodeString> <bdBdstoken>2c5aa8bdf8b3016474d2be6a97969645</bdBdstoken> <bdTime>1307756216</bdTime> </login_fail>
其中的bdVcodeString是16进制编码的数据。解出来是这样的。0010196108554508passport130775621604010103+GUID
其中红色的应该是时间戳。后面的04010103一直都没有变过。每次请求都是这个值。后面就是一个GUID了。这个GUID会用来校验,所以自己YY一个是不行的。把别的bdVcodeString里的GUID重用过来也不行。最前面的0010196108554508可以被其它的bdVcodeString中的替换,但是生成的图片就是全新的了。
这个Response里是没有图片的。图片还要自己去另一个地方去取。POST请求的地址是:
HOST是passport.baidu.com
服务器就会返回一张100*40大小的图片。图片中有1个4位数字。比如是1234。这里的图片是不唯一的。意思就是数字1234的图片可能有很多,如果图片是动态生成的。那一个数字就有100*40*2^32种可能的图片。所以你不要指望把图片抓下来做个Mapping就破解了。
这时,你再向登录服务器发一个登录请求就可以完成了。
tpl=wkc&cip=127.0.0.1&login_username=xxx&login_loginpass=ooo&phoneid=000000000000000&login_verifycode=&login_bdverify=&login_bdstoken=
其中的login_verifycode就是验证码,login_bdverify就是那一长串数字,login_bdstoken就是bdBdstoken里的值了。
此时的URL也要加一个参数。变成。
http://220.181.112.194/passport/?login=vc
这个验证图片在这里的作用就是防止一切自动化的非人为的访问。目前应用很广泛。
而目前,手机平台的在线阅读和网页版的根本不能同日而语。目前只能看TXT和EPUB。