国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

python網(wǎng)站登錄并簽到問題
天蓬老師
天蓬老師 2017-05-18 10:59:42
0
3
908

問題:python在登錄成功后,簽到時提示沒有登錄,也就是缺少cookie

我通過Fidder抓包發(fā)現(xiàn)和手動登錄成功相比,Python發(fā)出去的包缺少cookie下面是代碼,但是我查到用opener方式,python會保存cookie進行后繼的訪問

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)壓縮, 無需解壓')
    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)
天蓬老師
天蓬老師

歡迎選擇我的課程,讓我們一起見證您的進步~~

全部回復(fù)(3)
PHPzhong

缺少cookie原因是這樣的

發(fā)了login請求后http://account.oneplus.cn/one...
返回數(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}
樓主沒有重新發(fā)setsocookie請求,bbscookie

還有簽到失敗的原因是,簽到是post請求,樓主用get了

以下是我實踐后的代碼,僅供參考

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)
洪濤

你使用 requests 模塊試試,這個 API 很方便。
requests

阿神

account.oneplus.cn和www.oneplus.cn,應(yīng)該是跨域了

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板