Problem: Nachdem sich Python erfolgreich angemeldet hat, werden Sie beim Anmelden aufgefordert, nicht angemeldet zu sein, was bedeutet, dass Cookies fehlen
Durch die Fidder-Paketerfassung habe ich festgestellt, dass dem von Python gesendeten Paket im Vergleich zum manuellen Anmeldeerfolg Cookies fehlen. Unten ist der Code, aber ich habe festgestellt, dass Python das Cookie für den sp?teren Zugriff speichert
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('未經(jīng)壓縮, 無(wú)需解壓')
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)
歡迎選擇我的課程,讓我們一起見(jiàn)證您的進(jìn)步~~
缺少cookie原因是這樣的
發(fā)了login請(qǐng)求后http://account.oneplus.cn/one...
返回?cái)?shù)據(jù):是這樣的
{u'defaultData': None, u'errCode': u'11025', u'ret': u'1', u'data': {u'jumpUrl': None, u'isCartMerge': u'false', u'bbscookie': u'http://www.oneplusbbs.com/set...', u'times': u'0'}, u'page': None, u'errMsg': None}
樓主沒(méi)有重新發(fā)setsocookie請(qǐng)求,bbscookie
還有簽到失敗的原因是,簽到是post請(qǐng)求,樓主用get了
以下是我實(shí)踐后的代碼,僅供參考
import re
import requests
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'
email = '郵箱'
password = '密碼'
postDict = { 'loginName': email, 'passWord': password, 'source': '2', 'remember': '0', 'channel': '2', 'verifyCode': '' }
session = requests.Session()
r = session.post(url, data=postDict)
data = r.json()
print(data)
r = session.get(data['data']['bbscookie'])
sign_url = 'http://www.oneplusbbs.com/plugin.php?id=dsu_paulsign:sign'
r = session.get(sign_url)
m = re.search('name="formhash" value="([^"]+)"', r.text)
formhash = m.group(1)
print(formhash)
qiandao_url = 'http://www.oneplusbbs.com/plugin.php?id=dsu_paulsign:sign&operation=qiandao&infloat=1&inajax=1'
form = {'formhash': formhash,
'qdxq':'fd',
'qdmode':1,
'todaysay':'helloworld'
}
r = session.post(qiandao_url, data=form)
print(r.text)