关灯

Python 模拟微博登陆,亲测有效!

[复制链接]
赤脚晓涛 发表于 2019-5-13 14:55:02 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
Python 模仿微专登岸,亲测有用!-1.jpg

明天念做一个微专爬小我私家页里的东西,满意一些不成告人的机密。那末起首便要做那件必做之事!模仿登岸……

代码是参考了:https://www.douban.com/note/201767245/,我对代码停止了劣化,重组成了Python 3.6 版本,而且参加了大批正文便利各人进修。

PC 登录新浪微专时, 正在客户端用JS预先对用户名、暗码皆停止了减稀,并且正在POST之前会GET 一组参数,那也将做为POST_DATA 的一部门。如许,便不克不及用凡是的那种简朴办法去模仿POST 登录( 好比大家网 )。

正在提交POST恳求之前,需求GET 获得两个参数。地点是:http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)。

获得的数据中有 servertime 战 nonce 的值, 是随机的,其他值貌似出甚么用。
def get_servertime():
url = 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dW5kZWZpbmVk&client=ssologin.js(v1.3.18)&_=1329806375939'
# 返回出去的是一个Response工具,没法间接获得,text后,能够经由过程正则婚配到
# 大要少如许子的:sinaSSOController.preloginCallBack({"retcode":0,"servertime":1545606770, ...})
data = requests.request('GET', url).text
p = re.compile('\((.*)\)')
try:
json_data = p.search(data).group(1)
data = json.loads(json_data)
servertime = str(data['servertime'])
nonce = data['nonce']
return servertime, nonce
except:
print('获得 severtime 失利!')
return None

经由过程 httpfox 察看 POST 的数据,参数较庞大,此中“su" 是减稀后的username, sp 是减稀后的password,servertime 战 nonce 是上一步获得的,其他参数是稳定的。

username 颠末了 BASE64 计较:
username = base64.encodestring( urllib.quote(username) )[:-1]

password 颠末了三次SHA1 减稀,且此中参加了 servertime 战 nonce 的值去滋扰。即:两次SHA1减稀后,将成果减上 servertime 战 nonce 的值,再SHA1 算一次。
def get_pwd(pwd, servertime, nonce):
# 第一次计较,留意Python3 的减稀需求encode,利用bytes
pwd1 = hashlib.sha1(pwd.encode()).hexdigest()
# 利用pwd1的成果正在计较第两次
pwd2 = hashlib.sha1(pwd1.encode()).hexdigest()
# 利用第两次的成果再减上之前计较好的servertime战nonce值,hash一次
pwd3_ = pwd2 + servertime + nonce
pwd3 = hashlib.sha1(pwd3_.encode()).hexdigest()
return pwd3
def get_user(username):
# 将@标记转换成url中可以辨认的字符
_username = urllib.request.quote(username)
# Python3中的base64计较也是要字节
# base64出去后,最初有一个换止符,以是用了切片来了最初一个字符
username = base64.encodebytes(_username.encode())[:-1]
return username

将参数构造好,POST恳求。那以后借出有登录胜利,POST后获得的内乱容中包罗一句:
location.replace("http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=%B5%C7%C2%BC%C3%FB%BB%F2%C3%DC%C2%EB%B4%ED%CE%F3")

那是登录失利时的成果,登录胜利后成果取之相似,不外 retcode 的值是0。接下去再恳求那个URL,如许便胜利登录到微专了。记得要提早build 缓存。



Python 模仿微专登岸,亲测有用!-2.jpg




PYTHON牛逼!那凶猛没有念教吗?
回复

使用道具 举报

 

精彩评论5

正序浏览
清风醉 发表于 2019-5-13 16:04:41 来自手机 | 显示全部楼层
 
回复 支持 反对

使用道具 举报

 
╰流水无情、 发表于 2019-5-16 14:18:20 来自手机 | 显示全部楼层
 
看起来不错
回复 支持 反对

使用道具 举报

 
肤浅~~ 发表于 2019-5-16 14:20:56 来自手机 | 显示全部楼层
 
支持,楼下的跟上哈~
回复 支持 反对

使用道具 举报

 
这个夏天 发表于 2019-5-16 14:26:06 来自手机 | 显示全部楼层
 
是爷们的娘们的都帮顶!大力支持
回复 支持 反对

使用道具 举报

 
binxjj 发表于 2019-5-16 14:27:19 来自手机 | 显示全部楼层
 
支持你哈...................................
回复 支持 反对

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

排行榜

关注我们:微信公众号

官方微信

APP下载

全国客服QQ:

3388506817

Email:3388506817#qq.com

【版权声明】本站大部分内容由网友自发贡献,本站不拥有所有权,不承担相关法律责任,如有侵权请告知,本站将立刻删除涉嫌侵权内容。

Copyright   ©2015-2016  乐云媒自媒体之家Powered by©Discuz!技术支持:乐送网络     ( 津ICP备17006261号 )