转自:http://blog.sina.com.cn/s/blog_53e1aa480101fj66.html

1.在登录之前我们需要先从新浪服务器获取两个变量:servertime,nonce。其中servertime中新浪的服务器时间,nonce是一个随机生成的字符串。获取的需要通过这样一个网络接口:http://login.sina.com.cn/sso/prelogin.php?entry=miniblog&callback=sinaSSOController.preloginCallBack&user=”+ base64_username +”&client=ssologin.js(v1.3.16)
其中base64_username是 Encoding Base64

2.获取到我们需要的内容后,接下来就是加密的过程了。加密使用的是通用的SHA1加密算法:
把密码进行一次SHA1加密,结果再进行一次SHA1加密
把经过两次SHA1加密的结果附上servertime,nonce再进行一次SHA1加密
加密的结果作为登录密码

登录地址:http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.16)

需要Post的参数比较多;如下
entry=weibo
gateway=1
from=
savestate=7
useticket=1
ssosimplelogin=1
su=user // base 64之后的用户名
service=miniblog
servertime=servertime //上步得到的服务器时间
nonce=nonce //上步得到随机生成的字符串
pwencode=wsse
sp=enPassword //加密的密码
encoding=utf-8
url=”+ HttpUtility.UrlEncode(“http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack”)
returntype=META

请求使用POST方式,到这还没有登录成功,另外保存这时的Cookie是没用的,不能成功登录。
提交完成之后,服务器会传回一个响应,这个响应中给出了你登录服务器的票据,如果登录失败则不会出现。
成功的响应

正在登录 …

try{sinaSSOController.setCrossDomainUrlList({“retcode”:0,”arrURL”:["http:\/\/kandian.com\/logon\/do_crossdomain.php?action=login&savestate=1319597532"]});}catch(e){}try{sinaSSOController.crossDomainAction(‘login’,function(){location.replace(‘http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&ssosavestate=1319597532&ticket=ST-MTY4MjM3Mjc5Mw==-1318992732-xd-1FA01DEAC236E647AEE84E6015311BFB&retcode=0′);});}catch(e){}

失败的响应:如密码错误等

location.replace(“http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=��¼����������″);

通过观察可以发现retcode是判断登录成功与失败的标识码。

3.登录成功后,在body中的replace信息中的url就是我们下一步要使用的url。
然后对上面的url使用GET方法来向服务器发请求,保存这次请求的Cookie信息,就是我们需要的登录Cookie了。

另一个人的经验:http://www.douban.com/note/264976536/

之前写过一篇模拟登录新浪微博,是采用POST 用户名/密码等参数(经过加密)并保存Cookie来模拟登录的方法。
一般情况下,为了保证安全性,网站会定期更新登录的detail,例如修改参数名、更新加密(散列)算法等。所以模拟登录的代码定期肯定会失效,但是如果网站没有进行大的更新的话,稍微改一改还是能用的。另外,碰到验证码的情况就更难办了,虽然程序可以一定程度地识别验证码字符,但目前很难找到简单的可以通用的验证码识别程序。
很多豆友反馈有模拟登录新浪微博抓取数据的需求,其实对于一般的微博数据获取,如用户信息、微博内容等,使用微博开放平台API是更明智的选择:速度更快,而且节省许多网页处理的功夫。对于API没有开放的数据,我们再采用模拟登录的方法。

熟悉Web的朋友只要定期维护模拟登录的代码就可以一直成功登录微博。如果不那么熟悉的话,其实可以采用更naive的思路来解决:直接将Cookie发送给新浪微博以实现模拟登录。
1,获取Cookie
很简单,使用Chrome浏览器的”开发者工具(Developer Tools)“或者Firefox的"HTTPFOX"等插件就可以直接查看自己新浪微博的Cookie。(注: 这个私人Cookie千万不要泄露哦!)
2, 将Cookie作为访问微博的header参数提交
headers = {'cookie': 'your cookie'}
req = urllib2.Request(url, headers=headers) #每次访问页面都要提交headers
r = urllib2.urlopen(req)
具体代码见:http://whoop.sinaapp.com/download/weibo-login/

Sina微博模拟登录获取Cookies相关推荐

  1. java模拟登录获取Cookie

    关于java模拟登录获取Cookie时经历的坑 springboot 引入jar包版本 通过httpclient来模拟登录 代码部分 表单提交部分代码(未测试正确与否,只是找了前辈们的东西过来) 总结 ...

  2. python 模拟登录获取cookie_Python获取新浪微博cookie模拟登录

    这次尝试模拟登录微博,获取com网站cookie,cn不可用. 分析网站 首先打开weibo.com微博登录页面,如果已经登录需要先退出(其他的com登录页应该也是可以的). 打开chrome调试,查 ...

  3. python模拟登录页面下载_Python爬虫实战入门四:使用Cookie模拟登录——获取电子书下载链接...

    在实际情况中,很多网站的内容都是需要登录之后才能看到,如此我们就需要进行模拟登录,使用登录后的状态进行爬取.这里就需要使用到Cookie. 现在大多数的网站都是使用Cookie跟踪用户的登录状态,一旦 ...

  4. python模拟登记获取cookie_Python爬虫实战入门四:使用Cookie模拟登录——获取电子书下载链接...

    在实际情况中,很多网站的内容都是需要登录之后才能看到,如此我们就需要进行模拟登录,使用登录后的状态进行爬取.这里就需要使用到Cookie. 使用Cookie进行模拟登录 现在大多数的网站都是使用Coo ...

  5. python模拟登录获取Cookie

    在自动化处理过程中,有些操作往往需要登录之后才能进一步操作,所以我们需要通过登录获取到cookies信息,因为登录信息一般都是保存到cookies当中的,我们只需要在登录完成后把请求返回的cookie ...

  6. python爬虫登录下载_Python爬虫实战入门四:使用Cookie模拟登录——获取电子书下载链接...

    在实际情况中,很多网站的内容都是需要登录之后才能看到,如此我们就需要进行模拟登录,使用登录后的状态进行爬取.这里就需要使用到Cookie. 现在大多数的网站都是使用Cookie跟踪用户的登录状态,一旦 ...

  7. scrapy淘宝爬虫(通过模拟登录获取cookie)获取价格信息评论

    项目要求:爬取淘宝某领域下的商品名称,价格,评论. (我贼怂,如果阿里巴巴的朋友发现,请联系我,我立刻删帖,谢谢.) 一.构思流程 模拟登陆 获取cookie scrapy爬取数据 二.分步分析 (一 ...

  8. 模拟登录获取新浪微博的access_token

    public static AccessToken refreshToken(){                  Properties props = new Properties();      ...

  9. 爬取知乎壁纸:selenium模拟登陆获取cookies,再将cookies传递给requests

    selenium很好用,但是爬取大量数据时速度较慢. 通过selenium模拟登陆,获取cookies,再将cookies传递给requests,通过requests爬取加快速度. 以为知乎网爬取壁纸 ...

  10. python3 selenium 模拟登陆 获取cookies 保存到redis(安居客)

    # -*- coding: utf-8 -*- # @Time : 2018/9/18 9:23 # @Author : yuxjimport time import json from seleni ...

最新文章

  1. c 初始化char**_CC++|指针详述及实例分析
  2. 原生JS实现分页效果1.0
  3. 我用的archlinux+slim+openbox+tint2+feh+thunar+gnome-terminal+gvim+fcitx
  4. JDBC连接时所犯错误1.字符集设置不合适2.连接MySQL8.0社区版时时区不一致3..包名不能以Java.命名4.驱动被弃用
  5. mysql hive索引_Hive数据仓库--HiveQL视图和索引
  6. 树莓派下安装Django环境
  7. Running Maven project on Tomcat from Eclipse
  8. horizon client 无法识别域_LY-W100摄像头视频定时拍照图像识别分析抄表读表无线远传水表数_水表吧...
  9. 微服务接入oauth2_微服务权限终极解决方案,Spring Cloud Gateway+Oauth2实现统一认证和鉴权!...
  10. 阿里云Java虚拟机的安装位置
  11. 10岁吊打职业教师的天才,仅用10篇论文称霸数学界160多年,40岁英年早逝却迄今无人超越...
  12. JSP中 input type 用法
  13. oracle比较两个字段相似度,比较两个字符串的相似度
  14. 立于山巅!他,凭什么抗住万亿级流量冲击!
  15. python第三方库官方文档汇总
  16. 8081端口导致React Native启动失败
  17. 中国居民身份证号码校验算法
  18. 一些基本的灰度变换函数
  19. prometheus监控之postgresql
  20. Jeecg Boot 2.2 首个里程碑版本发布,基于SpringBoot的低代码平台

热门文章

  1. SIP协议搭建电信级VOIP/IM运营平台--架构篇(sip集群)
  2. JavaWeb项目架构之Kafka分布式日志队列
  3. java, android的aes等加密库
  4. 01我为什么学Unity3d
  5. iOS上应用Static Framework
  6. 细数2011TurboMail企业邮箱功能新飞跃
  7. Android开发:setAlpha()方法
  8. loadrunner要点总结
  9. Linux Linux内核参数调优
  10. 上拉加载下拉刷新控件WaterRefreshLoadMoreView