zoukankan      html  css  js  c++  java
  • 新浪微博模拟登录(Python+RSA加密算法)附源代码(转)

    首先是weiboLogin.py文件,实现一个类。

      1 #! /usr/bin/env python
      2 # -*- coding: utf-8 -*-
      3 
      4 import sys
      5 import urllib
      6 import urllib2
      7 import cookielib
      8 import base64
      9 import re
     10 import json
     11 import hashlib
     12 import rsa
     13 import binascii
     14 
     15 class weiboLogin:
     16     cj = cookielib.LWPCookieJar()
     17     cookie_support = urllib2.HTTPCookieProcessor(cj)
     18     opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
     19     urllib2.install_opener(opener)
     20     postdata = {
     21         'entry': 'weibo',
     22         'gateway': '1',
     23         'from': '',
     24         'savestate': '7',
     25         'userticket': '1',
     26         'ssosimplelogin': '1',
     27         'vsnf': '1',
     28         'vsnval': '',
     29         'su': '',
     30         'service': 'miniblog',
     31         'servertime': '',
     32         'nonce': '',
     33         'pwencode': 'rsa2',
     34         'sp': '',
     35         'encoding': 'UTF-8',
     36         'prelt': '115',
     37         'rsakv': '',
     38         'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
     39         'returntype': 'META'
     40     }
     41 
     42     def get_servertime(self,username):
     43         url = 'http://login.sina.com.cn/sso/prelogin.php?entry=sso&callback=sinaSSOController.preloginCallBack&su=%s&rsakt=mod&client=ssologin.js(v1.4.4)' % username
     44         data = urllib2.urlopen(url).read()
     45         p = re.compile('((.*))')
     46         try:
     47             json_data = p.search(data).group(1)
     48             data = json.loads(json_data)
     49             servertime = str(data['servertime'])
     50             nonce = data['nonce']
     51             pubkey = data['pubkey']
     52             rsakv = data['rsakv']
     53             return servertime, nonce, pubkey, rsakv
     54         except:
     55             print 'Get severtime error!'
     56             return None
     57 
     58     def get_pwd(self, password, servertime, nonce, pubkey):
     59         rsaPublickey = int(pubkey, 16)
     60         key = rsa.PublicKey(rsaPublickey, 65537) #创建公钥
     61         message = str(servertime) + '	' + str(nonce) + '
    ' + str(password) #拼接明文js加密文件中得到
     62         passwd = rsa.encrypt(message, key) #加密
     63         passwd = binascii.b2a_hex(passwd) #将加密信息转换为16进制。
     64         return passwd
     65 
     66     def get_user(self, username):
     67         username_ = urllib.quote(username)
     68         username = base64.encodestring(username_)[:-1]
     69         return username
     70     def get_account(self,filename):
     71         f=file(filename)
     72         flag = 0
     73         for line in f:
     74             if flag == 0:
     75                 username = line.strip()
     76                 flag +=1
     77             else:
     78                 pwd = line.strip()
     79         f.close()
     80         return username,pwd
     81     def login(self,filename):
     82         username,pwd = self.get_account(filename)
     83 
     84         url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.4)'
     85         try:
     86             servertime, nonce, pubkey, rsakv = self.get_servertime(username)
     87             print servertime
     88             print nonce
     89             print pubkey
     90             print rsakv
     91         except:
     92             print 'get servertime error!'
     93             return
     94         weiboLogin.postdata['servertime'] = servertime
     95         weiboLogin.postdata['nonce'] = nonce
     96         weiboLogin.postdata['rsakv'] = rsakv
     97         weiboLogin.postdata['su'] = self.get_user(username)
     98         weiboLogin.postdata['sp'] = self.get_pwd(pwd, servertime, nonce, pubkey)
     99         weiboLogin.postdata = urllib.urlencode(weiboLogin.postdata)
    100         headers = {'User-Agent':'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0 Chrome/20.0.1132.57 Safari/536.11'}
    101         req  = urllib2.Request(
    102             url = url,
    103             data = weiboLogin.postdata,
    104             headers = headers
    105         )
    106         result = urllib2.urlopen(req)
    107         text = result.read()
    108         print text
    109         p = re.compile('location.replace("(.*)")')#此处和之前略有区别,小心!
    110         try:
    111             login_url = p.search(text).group(1)
    112             #print login_url
    113             urllib2.urlopen(login_url)
    114             print "Login success!"
    115             return 1
    116         except:
    117             print 'Login error!'
    118             return 0

    然后是main.py文件

     1 # -*- coding: utf-8 -*-
     2 
     3 import weiboLogin
     4 import urllib
     5 import urllib2
     6 import time
     7 
     8 filename = './config/account'#保存微博账号的用户名和密码,第一行为用户名,第二行为密码
     9 
    10 WBLogin = weiboLogin.weiboLogin()
    11 if WBLogin.login(filename)==1:
    12     print 'Login success!'
    13 else:
    14     print 'Login error!'
    15     exit()

    转自 http://blog.csdn.net/monsion/article/details/8656690

     
  • 相关阅读:
    浅谈流形学习
    变分例子
    变分
    基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN,Faster R-CNN
    模拟退火
    粒子群算法
    JavaEE Tutorials (24)
    洛谷 P2026 求一次函数解析式
    洛谷 P1598 垂直柱状图
    洛谷 P1781 宇宙总统
  • 原文地址:https://www.cnblogs.com/jeesezhang/p/3604674.html
Copyright © 2011-2022 走看看