网站调用新浪微博内容(探索的过程1.了解大致过程登陆微博,文章可能不再适用)

优采云 发布时间: 2021-09-19 12:06

  网站调用新浪微博内容(探索的过程1.了解大致过程登陆微博,文章可能不再适用)

  概述:

  由于业务需要,我们需要编写爬虫代码来抓取新浪微博用户的信息

  虽然在互联网上可以找到很多信息,但由于新浪微博的修订和登录机制的修改,很多旧的文章不适合使用

  经过一番探索,我们成功模拟了新浪微博的登录操作。该项目使用JavaScript语言并在Chrome扩展中运行。让我们与您分享这个过程和经验

  请注意,本文是用2013. 08.16. 由于微博业务的频繁变化,it文章可能随着年龄的增长不再适用

  文本:探索的过程

  1.了解一般流程

  登录微博,使用Fiddler工具监控HTTP请求,拦截以下操作:

  

  您可以看到,在微博登录的整个过程中,有四个重要的HTTP请求,分别是:

  (1)GET/sso/prelogin.php)

  (2)POST/sso/login.php)

  (3)GET/ajaxlogin.php)

  (4)GET/u/2813262187)

  其中SSO是单点登录

  (1)是登录前的预处理,名字很明显--pre,这一步主要获取几个重要参数,作为下一步post表单的参数

  您可以在浏览器中访问此请求的地址以查看返回的结果:

  (v1.4.11)

  结果如下:

  1sinasocontroller.preloginCallBack({“retcode”:0

  2“服务器时间”:1376533839

  3“pcid”:“gz-7bdd82b8980057a8bbc1f86b21d5a86184dd”

  4“暂时”:“R1KGHZ”

  5“公开密钥”:“EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC2533E5063508E7F9A3BB77F4333490F915F6D63C55FE2F08A49B353F44AD3993CACC02DB784ABB8E42A9B1BBFFFB388E87A0E41B9B8F73A928EE0CEE1F6739884B97E9E88A1BB4927AC4A7981D644443”

  6“rsakv”:“1330428213”

  7“执行时间”:2})

  返回的数据包括servertime:Service timestamp、nonce:6位随机码、pubkey:RSA 2密码加密使用的公钥和RSA kV:显然也用于加密

  这四个值需要在下一步中使用

  在新浪微博登录机制的长期版本中,使用了Sha加密,没有pubkey和rsakv参数

  因此,在互联网上看到的2012年爬虫代码和模拟着陆代码不再适合使用,但总体逻辑没有太大变化。只需稍加修改,它仍然可以使用。这就是我为什么来到这里并撞上无数墙的原因=

  给出两个参考文章:

  对于Python

  对于PHP

  (2)提交表单时,我们仍会查看HTTP请求和表单内容

  

  是的,servertime,nonce,rsakv,Su:加密用户名,SP:加密密码。现在的问题是如何加密用户名和密码。很容易关注JS代码

  请求新浪登录页:,其中收录用于密码加密的JS代码

  里面的代码是加密的,找一个解密工具(),你几乎看不到逻辑

  (3)analysis ssologin.JS)

  既然我们知道servertime和nonce用于加密,我们不妨在文件中搜索这两个关键字并找到一些好的内容:

  

  回到上面,您可以看到表单中有Su和SP。您可以看到Su使用base64加密,而Su稍微复杂一些

  If是新浪当前版本的密码加密RSA 2的代码,else是Sha加密版本的代码,我们只需要关心If中的内容

  加密过程非常简单。首先,生成一个rsakey对象,设置publickey,然后对其进行加密

  通过一个接一个地向后推,您可以知道最后一个加密步骤中的最后一个参数Ag是原创密码值,不会让人眼花缭乱~

  总之,使用pubkey和10001的长字符串作为参数来调用setpublic()。注意它们是十六进制数;然后使用(servertime+nonce+PWD)作为参数来调用encrypt()

  让我们看看sinassoencoder是什么。它的定义是在1118行解密代码中。从这里,截取它到文件的末尾,并将其移出以供我们自己使用

  1} )。呼叫(sinaSSOEncoder)

  2//sinaSSOController=newSSOController()

  3//sinaSSOController.init()

  这就解决了密码加密的问题

  2.模拟请求过程

  既然您了解了一般原理,就可以开始模拟整个登录过程了

  (1)get请求)(v1.4.11)

  返回的数据定期与服务器时间、NANCE和RSAKV相匹配。请注意,当请求时,时间戳也应该发送到服务器。让我们看看Fiddler监视的QueRISH字符串:

  

  前五个参数在URL中显示和声明。最后一个参数在发送请求时添加。传递它

  我使用JavaScript,只需将它添加到jQuery和$.Ajax中的data属性中

  (2)post请求)(v1.4.11)提交登录表单

  1名代理人(v1.4.11)",

  2{type:'POST',headers:{Referer:'39;}

  3数据:{

  4条目:'微博'

  5公路:1

  6从:“”

  7保存状态:7

  8使用票:1

  9页参考:'#39

  10vsnf:1

  11 su:'MTgxMDU0MjMzNyU0MHFxLmNvbQ=='

  12服务:'迷你博客'

  13服务器时间:服务器时间

  14 nonce:nonce

  15pwencode:'rsa2'

  16千伏:千伏

  17 sp:sp

  18编码:'UTF-8'

  19预备课程:505

  20url:'#39

  21返回类型:'META'

  22}

  23},函数(err,data){…}

  代理是用于发送请求事务的封装模块。关注其中的数据对象。Su是base64加密的用户名。每个调用都是固定的,所以它写在这里

  Servertime、nonce和rsakv在上一步中被截获

  SP为加密密码,可参照上述加密方法获取

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线