Rumah  >  Soal Jawab  >  teks badan

masalah log masuk dan log masuk laman web python

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)
天蓬老师天蓬老师2711 hari yang lalu745

membalas semua(3)saya akan balas

  • PHPz

    PHPz2017-05-18 11:01:42

    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

    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)
    

    balas
    0
  • PHP中文网

    PHP中文网2017-05-18 11:01:42

    Anda boleh mencuba menggunakan modul permintaan API ini sangat mudah.
    permintaan

    balas
    0
  • 阿神

    阿神2017-05-18 11:01:42

    account.oneplus.cn dan www.oneplus.cn hendaklah merentas domain

    balas
    0
  • Batalbalas