毕设题目要使用到新浪微博数据,所以要爬取新浪微博的数据。一般而言,新浪微博的爬虫有两种模式:新浪官方API和模拟登录新浪微博。两种方法的异同点和适用情况就无须赘述了。前辈的文章已经非常多了。写这篇文章主要记录自己的探究过程。

背景知识:Http协议,HttpClient开源包。

1,微博登陆流程

使用Firefox下的HttpFox或者Chrome下的[工具]->[开发者工具](F12快捷键启动)可以查看浏览器与网站服务器之间的报文交换信息。

我使用的是FireFox下面的HttpFox。建议提前删除FireFox之前保存的关于新浪微博的Cookies。这样登录过程更明显。

首先在地址栏中输入weibo.com网址,进入到登陆界面。然后开启HttpFox,输入账号(account)和密码(password),单击登录按键,正常登陆。

如上图四个高亮项所示,微博的登录过程主要为四步HTTP请求:

(1)GET  http://login.sina.com.cn/sso/prelogin.php

(2)POST http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.11)

(3)GET http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&sudaref=weibo.com

(4)GET http://weibo.com/u/5081950920/home?wvr=5&uut=fin&from=reg

下面对四步进行解析:

(1)GET http://login.sina.com.cn/sso/prelogin.php

此步骤是向服务器请求servertime,nonce等参数。此时可暂不了解这些参数的用处。

首先GET请求的参数为:

这里,‘su’参数是登录账户account经过BASE64加密过后得到的字符串,先将account中的‘@’替换为'%40',然后对其BASE64加密,得到su的值。‘_’参数的值是当前时间(毫秒值)。其余参数值一般不变。

样例:

http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=Y29tbWVudHN3ZWlibyU0MDE2My5jb20%3D&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.11)&_=1395726032529

向服务器发送这个请求后,会得到服务器的JSon格式的返回值:

sinaSSOController.preloginCallBack({"retcode":0,"servertime":1395726033,"pcid":"gz-3271d864f76816bbfbd651c6887ba9eabf59","nonce":"04DGHY","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","showpin":0,"exectime":157})

retcode为0表示执行成功;servertime,nonce是后期对用户密码password加密用的参数。pubkey是加密用的公钥,它的值一般为固定不变的,任何一次请求返回值都一样。raskv也是加密使用的参数。其余参数用处不大。

(2)POST http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.11)

这一步就是向服务器提交表单,表单参数为:

Parameter

Value

说明

entry

weibo

固定值

gateway

1

固定值

from

空值

savestate

7

固定值

useticket

1

固定值

pagerefer

空值

vsnf

1

固定值

su

Y29tbWVudHN3ZWlibyU0MDE2My5jb20=

账号account经过BASE64加密后得到的值

service

miniblog

固定值

servertime

1395726063

上一步获取的值

nonce

04DGHY

上一步获取的值

pwencode

rsa2

新浪所使用的加密方法,具体值与新浪使用算法有关。短期内应该为固定值

rsakv

1330428213

上一步获取的值

sp

一个256位的密文

密码password加密后的值,具体加密方法下面详细介绍

encoding

UTF-8

固定值

prelt

171

一个在[100, 1000]内取随机值

url

http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack

固定值

returntype

META

固定值

将该表单提交到URL:

http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.11)

这个URL版本不断变化,现在为版本1.4.11。自己开发代码时,可以注意一下当时的具体版本。

上述参数pagerefer有时候会改为

ssosimplelogin

1

固定值

但是,经过验证,两者互换无差别。

重点为su和sp的获取。

su:用户名usrname,就是输入的账户account,一般为邮件地址,经过BASE64加密后获得。

sp:密码password经过加密后获得。加密算法有两种。登陆 weibo.com时,会获取新浪微博的一个名字为ssologin.js的 js 脚本文件,在weibo.com的页面中连接为 http://js.t.sinajs.cn/t35/miniblog/static/js/sso.js?version=8818b2c42b785af9 。上面截图没有截取,可自行截取,在输入weibo.com前打开HttpFox即可。

该脚本文件中包含了整个登陆过程,同时包含了 RSA加密算法,WSSE加密算法和BASE64加密算法。目前该脚本文件的版本为1.4.11,版本一直在升级,升级过程加密算法可能会做更改。具体加密过程此处不表,课查看js该文件,或者翻阅文章开头的链接博文,里面讲解比较详细。

具体而言,就是RSA加密算法是将servertime,nonce与账户密码链接,同时设置rsaPubkey和‘10001’(固定值)作为参数,进行RSA加密,现在执行的是这一版本。

RSA:

request["servertime"] =me.servertime;

request["nonce"] =me.nonce;

request["pwencode"] = "rsa2";

equest["rsakv"] =me.rsakv;var RSAKey = newsinaSSOEncoder.RSAKey();

RSAKey.setPublic(me.rsaPubkey,'10001');

password= RSAKey.encrypt([me.servertime, me.nonce].join("\t") + "\n" + password);

WSSE加密算法曾经作为sp的加密算法,现在不采用,以后或许也会重新采用。具体行为就是两次SHA1加密password,然后加入servertime和nonce再SHA1加密一次。

WSSE:

request["servertime"] =me.servertime;

request["nonce"] =me.nonce;

request["pwencode"] = "wsse";

password=sinaSSOEncoder.hex_sha1(""sinaSSOEncoder.hex_sha1(sinaSSOEncoder.hex_sha1(password)) + me.servertime + me.nonce);

然后表单提交之后,会得到一个html文件(在HttpFox中查看Content内容)。

ÐÂÀËͨÐÐÖ¤

location.replace("http://weibo.com/sso/login.php?url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack%26sudaref%3Dweibo.com&ticket=ST-NTA4MTk1MDkyMA==-1395726048-gz-E9A629068822EF01DD1427CA6D0C14D9&retcode=0");

新浪微博登录 java_Java实现模拟登录新浪微博相关推荐

  1. python模拟登录网站_Python模拟登录淘宝都实现了,你还怕模拟登录?

    文章转载自公众号 :裸睡的猪 , 作者 猪哥66 最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章! 看了下网上有很多关于模拟登录淘宝,但是 ...

  2. python脚本根据cookies自动登录网站_python模拟登录并且保持cookie的方法详解

    前言 最近在爬行 nosec.org 的数据,看了下需要模拟登录拿到cookie后才能访问想抓的数据,重要的是 nosec.org 的登录页面 form 中有个 authenticity_token ...

  3. python3爬虫模拟登录_python3爬虫——模拟登录丁香园并提取信息

    上一篇:模拟登录QQ邮箱 ps:在进行模拟登录时,输入账号密码后,会弹出验证码,目前还没有解决模拟验证,所以本教程需要进行人工验证. 代码: from selenium import webdrive ...

  4. python模拟手机登录_Python(Tornado)模拟登录小米抢手机

    今天看到同事参与小米的抢购,几经数个星期的尝试,终于抢到了一台小米电视--看了一下小米的抢购流程,似乎可以用程序可破.于是想写点东西玩玩(你懂的--),第一步肯定是先得模拟登录小米帐号,当练手吧. 用 ...

  5. HttpClient模拟登录、HtmlUnit模拟登录,jsoup爬取登录后的内容(不带验证码)

    一.HttpClient模拟登录是通过post或get请求,登录后抓取的是静态页面,动态页面使用HtmlUnit public static void main(String[] args) thro ...

  6. python模拟qq空间登录_python selenium模拟登录163邮箱和QQ空间

    最近在看python网络爬虫,于是我想自己写一个邮箱和QQ空间的自动登录的小程序, 下面以登录163邮箱和QQ空间和为例: 了解到在Web应用中经常会遇到frame/iframe 表单嵌套页面的应用, ...

  7. php rsa模拟登录微博,微博模拟登录爬虫

    起因 [email protected],同时她附了源码,我下载源码之后发现没办法运行,简单调试了一下,目前可以正常获取数据.现在把修改的代码贴在下面 # -*- coding: utf-8 -*- ...

  8. 使用ython模拟登录淘宝

    最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章! 看了下网上有很多关于模拟登录淘宝,但是基本都是使用scrapy.pyppeteer.se ...

  9. 【CURL】模拟登录网站并获取用户信息

    模拟登录网站并获取用户信息 前言 这次来做的是通过代码的方式,模拟登录秒拍官网,获取登录用户的信息. 前后端分离 本文的标题是CURL,传统的网站是PHP代码直接渲染项目视图,通过表单提交到控制器直接 ...

  10. 第26讲:模拟登录爬取实战案例

    在上一课时我们了解了网站登录验证和模拟登录的基本原理.网站登录验证主要有两种实现,一种是基于 Session + Cookies 的登录验证,另一种是基于 JWT 的登录验证,那么本课时我们就通过两个 ...

最新文章

  1. hdu-----(4857)逃生(拓扑排序)
  2. 网页javascript加载不出_写给初学者的JavaScript异步编程和背后思想
  3. [BZOJ 1047]理想的正方形
  4. 使用Maven构建Web项目-测试
  5. 嵌入式工作笔记0002---认识CRT显示器
  6. [Ext JS 4] 实战之 ComboBox 和 DateField 的点击事件在IE下失效
  7. BZOJ 2120: 数颜色
  8. k3 xp服务器系统,如何在英文XP环境下安装k3系统.doc
  9. python读音有道-python利用有道翻译实现quot;语言翻译器”的功能
  10. 六下计算机教学总结,六年级信息技术教师教学工作总结
  11. NumPy中文文档搬砖学习笔记(1)
  12. 百度云高速下载的两种方法
  13. 如何用python爬视频_如何使用python网络爬虫抓取视频?
  14. ajax怎么设置地图,通过数据库和ajax方法写出地图的实例代码
  15. linux环境hexo和GithubPages搭建个人博客
  16. webview进行下载踩坑记录
  17. TCP之快重传与快恢复
  18. 天池大赛-心跳信号分类预测:探索性数据分析
  19. $inject的用法
  20. 微信小程序运行及更新机制

热门文章

  1. as常用固定搭配_as 。。。as 一些常考的固定搭配【重点中考】
  2. Clone 1. 肿瘤克隆进化之前世今生
  3. 电脑基础知识入门:键盘上的英文,意思和功能汇总!
  4. getBytes方法
  5. 从0开始使用腾讯云GPU服务器
  6. 云终端能改计算机,云终端旧机改造方案(把旧电脑改成瘦客户机)
  7. 2021-7-20 Cityscape 数据集从19分类到4分类BiSeNetv1-v2训练验证和测试一条龙
  8. 用户兴趣模型分类以及推荐系统技术调研
  9. 页号P与页内偏移地址W的计算
  10. 等保三级全称是什么?是什么意思?