您的位置:首页 > 编程语言 > Python开发

python 模拟登陆weibo 代码 已验证

2013-07-24 19:59 656 查看
weibo模拟登陆代码已验证
验证时注意两个url地址是否最新,如登陆不成功,可以手动Firebug验证 postdata 是否变化
#! /usr/bin/env python
#coding=utf8
import urllib
import urllib2
import cookielib
import base64
import re
import json
import hashlib
import rsa
import binascii

cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
postdata = {
'entry': 'weibo',
'gateway': '1',
'from': '',
'savestate': '7',
'userticket': '1',
'ssosimplelogin': '1',
'vsnf': '1',
'vsnval': '',
'su': '',
'service': 'miniblog',
'servertime': '',
'nonce': '',
'pwencode': 'rsa2',
'sp': '',
'encoding': 'UTF-8',
'prelt': '57',
'rsakv' : '',
'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
'returntype': 'META'
}

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'
url = 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=Z2V6dW93ZWklNDAhMjYuY29t&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.11)&_=1374657169012'
data = urllib2.urlopen(url).read()
p = re.compile('\((.*)\)')
try:
json_data = p.search(data).group(1)
data = json.loads(json_data)
servertime = str(data['servertime'])
nonce = data['nonce']
rsakv = data['rsakv']
pubkey = data['pubkey']
return servertime, nonce, rsakv, pubkey
except:
print 'Get severtime error!'
return None

def get_pwd(pwd, servertime, nonce, pubkey):
rsaPublickey = int(pubkey, 16)
key = rsa.PublicKey(rsaPublickey, 65537) #创建公钥
message = str(servertime) + '\t' + str(nonce) + '\n' + str(pwd) #拼接明文js加密文件中得到
passwd = rsa.encrypt(message, key) #加密
passwd = binascii.b2a_hex(passwd) #将加密信息转换为16进制。
return passwd

def get_user(username):
username_ = urllib.quote(username)
username = base64.encodestring(username_)[:-1]
return username

def login():
username = '用户名'
pwd = '密码'
url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)'
url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.11)'
# url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.4)'
try:
servertime, nonce, rsakv, pubkey = get_servertime()
print servertime, nonce, rsakv, pubkey
except:
return
global postdata
postdata['servertime'] = servertime
postdata['nonce'] = nonce
postdata['rsakv'] = rsakv
postdata['su'] = get_user(username)
postdata['sp'] = get_pwd(pwd, servertime, nonce, pubkey)
postdata = urllib.urlencode(postdata)
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0'}
req  = urllib2.Request(
url = url,
data = postdata,
headers = headers
)
result = urllib2.urlopen(req)
text = result.read()
p = re.compile('location\.replace\(\"(.*?)\"\)')

try:
login_url = p.search(text).group(1)
result = urllib2.urlopen(login_url)
text = result.read()
print "登录成功!"
except:
print 'Login error!'

login()


分别引自
http://www.cnblogs.com/mouse-coder/archive/2013/03/03/2941265.html
http://www.douban.com/note/201767245/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 模拟登陆