模拟登陆广工统一认证系统

前言

之前一直尝试实现模拟登陆广工统一认证系统,但是都未能取得成功。最近在同学的帮助下,终于实现了这一目标。
一直失败的原因:URL的错误选择

错误URL:http://authserver.gdut.edu.cn/authserver/loginservice=http%3A%2F%2Fjxfw.gdut.edu.cn%2Fnew%2FssoLogin

正确的URL(可以从html里得到):
http://authserver.gdut.edu.cn/authserver/login;
cookie
?service=http%3A%2F%2Fjxfw.gdut.edu.cn%2Fnew%2FssoLogin

疑惑

我把cookie放在headers里面,无法登陆。而只有放在URL里才能正常登陆,确实让我很疑惑。

代码
"""
author victory
date 2020/1/12

"""

import http
import re
import ssl
from http import cookiejar
from urllib import request, parse
from urllib.request import HTTPCookieProcessor

# 取消全局证书,这一步必须,教务系统升级后出现的问题
ssl._create_default_https_context = ssl._create_unverified_context

# 相当于CookieStore,用于管理cookie
cj = http.cookiejar.MozillaCookieJar()
pc = HTTPCookieProcessor(cj)  # cookie处理器
opener = request.build_opener(pc) # 创建URL打开器
res = opener.open(
    'http://authserver.gdut.edu.cn/authserver/login?service=http%3A%2F%2Fjxfw.gdut.edu.cn%2Fnew%2FssoLogin')
res_str = res.read().decode()

# 抓取登陆链接
login_str = re.findall('/authserver/login;.+\?service=http%3A%2F%2Fjxfw.gdut.edu.cn%2Fnew%2FssoLogin', res_str)[0]

# 抓取表单数据之一
lt = re.findall('<input type="hidden" name="lt" value=".+"/>', res_str)
lt = re.findall('value=".+"', lt[0])
lt = lt[0][7:len(lt[0]) - 1]

# cookie 已经在链接里面了,所以不需要把cookie放在headers里,
# 否则无法登陆,
# 原因未知

'''
for e in cj:
    print(e)
    headers = {
        'Cookie': e.name + '=' + e.value,
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4003.0 Safari/537.36 Edg/81.0.381.0'
    }

print(headers)
'''

# 表单数据
data = {
    'username': 'xxxxx',
    'password': 'xxx',
    'dllt': 'userNamePasswordLogin',
    'execution': 'e1s1',
    '_eventId': 'submit',
    'rmShown': '1',
    'lt': lt
}

# 登陆链接
login_url = 'http://authserver.gdut.edu.cn' + login_str

req = request.Request(login_url,
                      data=parse.urlencode(data).encode()
                      )
res = opener.open(req)


# 这里要注意,一共有3个cookie,
# 因为登陆行为发生了3次重定向,
# 只需要取教务系统的cookie即可,
# 这里是最后一个
for e in cj:
    headers = {
        'Cookie': e.name + '=' + e.value
    }


# 抓取成绩
req = request.Request(
    'https://jxfw.gdut.edu.cn/xskccjxx!getDataList.action?xnxqdm=201901&page=1&rows=50&sort=xnxqdm&order=asc',
    headers=headers
)
res = opener.open(req)
print(res.read().decode())
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值