Masalah: Selepas python berjaya log masuk, ia menggesa anda tidak log masuk apabila anda log masuk, yang bermaksud kuki tiada
Saya dapati melalui penangkapan paket Fidder bahawa berbanding dengan log masuk manual yang berjaya, pakej yang dihantar oleh Python tidak mempunyai kuki, tetapi saya mendapati bahawa menggunakan kaedah pembuka, Python akan menyimpan kuki untuk akses seterusnya
.import urllib
from http import cookiejar
import gzip
def getOpener(head):
cookie = cookiejar.CookieJar()
pre = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(pre)
header = []
for key, value in head.items():
elem = (key, value)
header.append(elem)
opener.addheaders = header
return opener, cookie
#伪装浏览器的头部
header = {
'Connection': 'keep-alive',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
'Accept-Encoding': 'gzip, deflate, br',
'Host':'account.oneplus.cn',
'X-Requested-With':'XMLHttpRequest',
'Origin': 'http://account.oneplus.cn',
}
url = 'http://account.oneplus.cn/onepluslogin'
opener, cookie = getOpener(header)
def ungzip(data):
try: # 尝试解压
print('正在解压.....')
data = gzip.decompress(data)
print('解压完毕!')
except:
print('未经压缩, 无需解压')
return data
#
#
email = r'***********'
password = '****'
postDict = {
'loginName': email,
'passWord': password,
'source': '2',
'remember': '0',
'channel': '2',
'verifyCode': ''
}
postData = urllib.parse.urlencode(postDict).encode()
op = opener.open(url, postData)
data = op.read()
data = ungzip(data)
print(data)
#--------签到--------------
register_url = 'http://www.oneplusbbs.com/plugin.php?id=dsu_paulsign:sign&operation=qiandao&infloat=1&inajax=1'
re_op = opener.open(register_url)
data = op.read()
data = ungzip(data)
print(data)
Sebab hilang cookies ni
Selepas menghantar permintaan log masuk ke http://account.oneplus.cn/one...
Data yang dikembalikan adalah seperti ini
{u'defaultData': Tiada, u'errCode': u'11025', u'ret ' : u'1', u'data': {u'jumpUrl': Tiada, u'isCartMerge': u'false', u'bbscookie': u'http://www.oneplusbbs.com/set.. . ', u'times': u'0'}, u'page': Tiada, u'errMsg': Tiada}
Hos tidak menghantar semula permintaan setsocookie, bbscookie
Sebab mengapa log masuk gagal ialah log masuk adalah permintaan pos, dan pengarang menggunakan get
Berikut adalah kod saya selepas latihan, untuk rujukan sahaja
Anda boleh mencuba menggunakan modul permintaan API ini sangat mudah.
permintaan
account.oneplus.cn dan www.oneplus.cn hendaklah merentas domain