这样啊812 2022-07-27 21:01 采纳率: 70%
浏览 103
已结题

强智教务系统模拟登录最后带着decoded参数请求http://218.75.197.123:83/Logon.do?method=logon失败

我这里参数encoded应该没有求错,但不知道为什么调用login_cookie1()这个函数请求url:http://218.75.197.123:83/Logon.do?method=logon%E5%93%8D%E5%BA%94%E4%B8%80%E7%9B%B4%E4%B8%8D%E6%98%AF%E6%88%91%E6%83%B3%E8%A6%81%E7%9A%84%E3%80%82%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA302%E8%AF%B7%E6%B1%82%EF%BC%8C%E5%AE%83%E4%BC%9A%E8%BF%94%E5%9B%9Elocation%EF%BC%8C%E6%88%91%E6%98%AF%E6%83%B3%E6%8B%BF%E5%88%B0%E8%BF%99%E4%B8%AAlocation%E5%86%8D%E8%AF%B7%E6%B1%82%E8%BF%99%E4%B8%AAurl%E5%BE%97%E5%88%B0set-cookie

import requests
import execjs
import ddddocr
import re


def get_first_cookie(proxies):
    """
    返回向登录首页发送请求返回的cookie  # 现在的请求是没有经过服务器校验账号信息的,所以默认返回登录不成功的信息
    """
    url = "http://218.75.197.123:83/"
    headers = {
        'Referer': 'http://jwc.hut.edu.cn/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    }
    cookie = requests.get(url,headers=headers,proxies=proxies).cookies
    print(cookie)
    JSESSIONID = cookie["JSESSIONID"]
    SERVERID = cookie["SERVERID"]
    return JSESSIONID,SERVERID


def get_second_cookie(proxies):
    """
    第二个url发请求
    """
    JSESSIONID,SERVERID = get_first_cookie(proxies)
    cookie = f"JSESSIONID={JSESSIONID}; SERVERID={SERVERID}"
    url = "http://218.75.197.123:83/Logon.do?method=logon&flag=sess"
    headers = {
        'Referer': 'http://218.75.197.123:83/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
        'cookie':cookie
    }
    resp = requests.post(url,headers=headers,proxies=proxies)
    JSESSIONID = resp.cookies["JSESSIONID"]
    dataStr = resp.text
    # print(dataStr)
    # dataStr = "XX72c62n11C329a909E5Kk7f151e62x8F9O2096#23331121123321221231"
    return dataStr,cookie,JSESSIONID


def get_RANDOMCODE(cookie,proxies):
    """
    识别验证码
    :param cookie:
    :return:
    """
    url = "http://218.75.197.123:83/verifycode.servlet"
    headers = {
        'Referer': 'http://218.75.197.123:83/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
        'cookie': cookie
    }

    # 返回了一张验证码图片,以二进制保存到文件中
    resp_jpg_content = requests.get(url,headers=headers,proxies=proxies).content
    with open("verifycode.jpg","wb") as f:
        f.write(resp_jpg_content)

    # 下面是对验证码进行识别
    ocr = ddddocr.DdddOcr()
    with open("verifycode.jpg","rb") as f2:
        img_bytes = f2.read()
    randomcode = ocr.classification(img_bytes)
    # print(randomcode)
    return randomcode


def get_encoded(dataStr,account,password):
    """
    获取encoded
    """
    scode = dataStr.split("#")[0]
    sxh = dataStr.split("#")[1]
    code = account+"%%%"+password
    # print(code)
    encoded = ""
    i = 0
    while i<len(code):
        if i<20:
            encoded = encoded + code[i:i+1] + scode[0:int(sxh[i:i+1])]
            scode = scode[int(sxh[i:i+1]):len(scode)]
        else:
            encoded = encoded + code[i:len(code)]
            i = len(code)
        i += 1
    res = encoded.split("%")
    # print(res)
    result_encoded = "%25".join(res)
    # python生成的encoded%后面没有25两个字符,但在请求执行JavaScript代码中%后面多了一个25,所以要补上
    # print(result_encoded)
    # print(encoded)
    # print(result_encoded)
    return encoded


def login_cookie1(useraccount,userpassword,proxies):
    """
    拿到请求这个URL:http://218.75.197.123:83/Logon.do?method=logon返回来的set-cookie,location
    """
    # session = requests.Session()
    RANDOMCODE = get_RANDOMCODE(cookie,proxies)

    encoded = get_encoded(dataStr,useraccount,userpassword)
    print(RANDOMCODE,encoded)
    print(cookie_req_2)
    url = "http://218.75.197.123:83/Logon.do?method=logon"
    headers = {
        'Accept': 'text/html, application/xhtml+xml, image/jxr, */*',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.5',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive',
        'Content-Length': '131',
        'Content-Type': 'application/x-www-form-urlencoded',
        'cookie': cookie_req_2,
        'Host': '218.75.197.123:83',
        'DNT': '1',
        'Referer': 'http://218.75.197.123:83/Logon.do?method=logon',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'
    }
    data = {
        'userAccount': useraccount,
        'userPassword': "",
        'RANDOMCODE': RANDOMCODE,   # 这个是验证码,暂时不处理
        'encoded': encoded
    }
    resp = requests.post(url,headers=headers,data=data,allow_redirects = False,proxies=proxies)  # 不跳转,allow_redirects = False
    print(resp.status_code)
    resp = resp.headers
    print(resp)


def main(SERVERID,JSESSIONID):

    url = "http://218.75.197.123:83/jsxsd/framework/xsMain.jsp"
    headers = {
        'Referer': 'http://218.75.197.123:83/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
        'Cookie': f'JSESSIONID=769C6B4E9A1BEF0F37011948E709ED3D; SERVERID={SERVERID}; JSESSIONID={JSESSIONID}'
    }
    resp = requests.get(url,headers=headers)

    print(resp.status_code)


if __name__ == '__main__':
    # 设置代理IP   Python3.7后必须使用proxies={‘http’: ‘http://127.0.0.1:8080’}这种形式
    proxies = {
        # 'http': 'http://101.200.127.149:3129'
    }
    # useraccount = input("请输入你的账号:")
    # userpassword = input("请输入你的密码:")
    useraccount = ""   # 账号
    userpassword = ""   # 密码
    dataStr, cookie,JSESSIONID = get_second_cookie(proxies)
    SERVERID = re.findall(r"SERVERID=(.*)",cookie)[0]
    cookie_req_2 = f"JSESSIONID={JSESSIONID}; SERVERID={SERVERID}"
    login_cookie1(useraccount,userpassword,proxies)
    # main(SERVERID,JSESSIONID_1)


  • 写回答

1条回答 默认 最新

  • 快乐小土狗 2022-07-27 21:51
    关注

    报错是什么?

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月28日
  • 创建了问题 7月27日