• 百度文库手机版通信协议分析


    下面表格中的操作的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"},
    书籍详情

    http://wenku.n.shifen.com/

    ?rt=dp&doc_id=abc6e50016fc700abb68fcfa

     

    {"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

    &rn=5&pw=1000&dt=1

    返回纯文本,如果是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

    &pn=0&rn=0&pw=1000&dt=1

    要求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请求的地址是:

    http://passport.n.shifen.com/cgi-bin/genimage?3030313031393631303835353435303870617373706F72743133303737353632313630343031303130338559258195D169FA820791E1CC77719D

    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。

  • 相关阅读:
    Expedition(POJ 2431)
    spring异步@Async原理和注意问题
    springBoot事件
    spring定时任务原理
    BeanFactory和FactoryBean的区别
    Spring容器启动流程——源码阅读分析
    spring循环依赖
    spring相关的问题和原因分析
    zookeeper原理
    zookeeper的使用
  • 原文地址:https://www.cnblogs.com/nankezhishi/p/wenku.html
Copyright © 2020-2023  润新知