




















这次尝试模拟登录微博,获取com网站cookie,cn不可用。
<c-f> 查找关键字 rsa2,这一块就是加密代码,很深奥有没有。这一块搞了半天最后还是google出来的.-.-.

登陆的过程:
我们就需要:
prelogin_url = r'https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.15)' #noqa def Prelogin(prelogin_url): data = requests.get(prelogin_url).content.decode('utf-8') p = re.compile('\((.*)\)') data_str = p.search(data).group(1) server_data_dict = eval(data_str) pubkey = server_data_dict['pubkey'] servertime = server_data_dict['servertime'] nonce = server_data_dict['nonce'] rsakv = server_data_dict['rsakv'] return pubkey, servertime, nonce, rsakv
def RSAEncoder(username, password, pubkey, servertime, nonce): su_url = urllib.parse.quote_plus(username) su_encoded = su_url.encode('utf-8') su = base64.b64encode(su_encoded) su = su.decode('utf-8') rsaPublickey = int(pubkey, 16) e = int('10001', 16) key = rsa.PublicKey(rsaPublickey, e) message = str(servertime) + '\t' + str(nonce) + '\n' + str(password) password = rsa.encrypt(message.encode('utf-8'), key) sp = binascii.b2a_hex(password) return su, sp
def PostData(username, password, pubkey, servertime, nonce, rsakv): su, sp = RSAEncoder(username, password, pubkey, servertime, nonce) post_data = { 'encoding': 'UTF-8', 'entry': 'weibo', 'from': '', 'gateway': '1', 'nonce': nonce, 'pagerefer': '', 'prelt': '645', 'pwencode': 'rsa2', 'returntype': 'META', 'rsakv': rsakv, 'savestate': '7', 'servertime': str(servertime), 'service': 'miniblog', 'sp': sp, 'sr': '1920*1080', 'su': su, 'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack', #noqa 'useticket': '1', 'vsnf': '1', } return post_data
可以登录了。第一次请求到的网页不是登录成功的页面,而是一个重定向,如图,用正则表达式提取网址,进行访问,成功!
def login(self):
pubkey, servertime, nonce, rsakv = Prelogin(self.prelogin_url)
post_data = PostData(self.username, self.password, pubkey, servertime,
nonce, rsakv)
session = requests.Session()
response = session.post(self.login_url, params=post_data,
headers=self.headers)
text = response.content.decode('gbk')
pa = re.compile(r'location\.replace\(\'(.*?)\'\)')
redirect_url = pa.search(text).group(1)
response = session.get(redirect_url, headers=self.headers)
print(session.cookies)

GitHub开源地址:https://github.com/matianhe/crawler
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。