Skip to content

Instantly share code, notes, and snippets.

Created January 15, 2016 13:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/b4531676848cdf750e2c to your computer and use it in GitHub Desktop.
Save anonymous/b4531676848cdf750e2c to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
import requests
def login():
header1 = {
'Accept':'*/*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-cn',
'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.3; WOW64; Trident/7.0)',
'X-Requested-With': 'XMLHttpRequest',
'DNT': '1',
'Content-Length': '240',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Referer': 'http://www.sd.10086.cn/portal/passiveLogon.do',
'Connection': 'Keep-Alive',
'Host': 'www.sd.10086.cn'
}
header2 = {
'Accept': 'text/html, application/xhtml+xml, */*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN',
'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.3; WOW64; Trident/7.0)',
'Referer': 'http://www.sd.10086.cn/portal/passiveLogon.do',
'DNT': '1',
'Connection': 'Keep-Alive',
'Host': 'www.sd.10086.cn'
}
payload1 = {
#mobileNum和servicePWD为手机号和密码,均需要经过base64编码
'mobileNum': '11位手机号的base64编码',
'servicePWD': '6位密码的base64编码',
'randCode': '请点击',
'smsRandomCode':'',
'submitMode': '2',
'logonMode': '1',
'FieldID': '1',
'ReturnURL': 'www.sd.10086.cn/eMobile/jsp/common/prior.jsp',
'ErrorUrl': '../passiveLogon.do',
'entrance': 'IndexBrief',
'codeFlag': '0',
'openFlag': '1'
}
payload2 = {
#servNumber为手机号
'servNumber':'11位手机号原始值'
}
loginUrl1 = 'http://www.sd.10086.cn/portal/servlet/LoginServlet'
loginUrl3 = 'http://www.sd.10086.cn/portal/servlet/CookieServlet?FieldID=2'
loginUrl4 = 'http://www.sd.10086.cn/eMobile/loginSSO.action?Attritd='
loginUrl5 = 'http://www.sd.10086.cn/eMobile/ajax_userBalance.action?menuid=index'
s = requests.session()
#第一次post,提交手机号和密码
r = s.post(loginUrl1, headers = header1, data = payload1)
#第二次get,获取token
r = s.get(loginUrl3, headers = header2)
#处理返回的数据,将token值存到临时变量a中
a = r.text.replace('\n','').replace("var a='","").replace("';onServerResponse(a);","")
#第三次get,将token拼接到loginUrl4上再次get,应该是更新cookie(猜测)
loginUrl4 = loginUrl4 + a
r = s.get(loginUrl4, headers = header2)
#第四次post,再次提交手机号,获取当前余额,返回值为json格式
r = s.post(loginUrl5, headers = header2, data = payload2)
print r.text
if __name__ == '__main__':
login()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment