Ajuste perfecto para el plan de estudios de Xiaoai (Universidad de Ciencia y Tecnología de Henan)

1. Introducción:

Para el artículo anterior, consulte mi blog anterior:

  1. El sistema de administración educativa de Qingguo se adapta al plan de estudios de Xiaoai

El código de este artículo ahora es de código abierto:

  1. El plan de estudios de Xiaoai se adapta al albergue
  2. Plan de estudios de Xiaoai adaptado a github

El año pasado, traté de adaptarme al plan de estudios Xiaoai de nuestra escuela, pero debido a un nivel insuficiente, copié directamente la interfaz y los parámetros. El código es el que se muestra a continuación. Sin modificación dinámica de la interfaz, básicamente significa que la interfaz solo puede ser utilizado durante un semestre En línea con las características de código elegante de los programadores.

function scheduleHtmlProvider(iframeContent = "", frameContent = "", dom = document) {
    
    
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://jwgl.hist.edu.cn/wsxk/xkjg.ckdgxsxdkchj_data10319.jsp?params=eG49MjAyMiZ4cT0wJnhoPTIwMjEwMDAwNTExMg==', false);
    xhr.send();
    return xhr.responseText;

}

2. Interfaz de análisis:

Nuestras condiciones conocidas:

  1. La dirección de la interfaz del plan de estudios.
  2. Código de análisis para el plan de estudios. (Consulte el blog anterior-> Adaptación del sistema educativo Qinguo Horario del plan de estudios Xiaoai )
  1. Nuestro propósito es comprender qué parámetros se pasan y los pasamos manualmente.

  2. Generalmente, si los parámetros están encriptados, es difícil para nosotros analizar (al principio pensé que estaba encriptado)

xhr.open('GET', 'http://jwgl.hist.edu.cn/wsxk/xkjg.ckdgxsxdkchj_data10319.jsp?params=eG49MjAyMiZ4cT0wJnhoPTIwMjEwMDAwNTExMg==', false);
  1. Sabemos por esta interfaz que se pasa un parámetro params.

De hecho, al principio no sabía qué era este parámetro, pero recientemente escribí un programa de código QR, y los dos últimos "==" son demasiado similares a base64, y luego. . . . , intentaré usar el análisis inverso base64.

inserte la descripción de la imagen aquí

Luego se descubrió que esto es en realidad una transcodificación de tres parámetros y no hay otro cifrado.

  1. Estos tres parámetros se pueden adivinar literalmente
xn = 2022 //2022-2023学年
xq = 1 //0: 1学期, 1: 2学期
xh = 2021000005123 // 这个学号和我的学号不一样,我猜测是uid
  1. Obtener parámetros manualmente:
    el semestre del año académico es fácil de obtener, la primera mitad del año es el segundo semestre y la segunda mitad del año es el primer semestre. El año escolar también es un algoritmo similar.
function getParam(){
    
    
    const date = new Date();
    let year = date.getFullYear();//获取完整的年份(4位)
    const month = date.getMonth() + 1; //获取当前月份(0-11,0代表1月)
    let xq = 0;
    if(month < 7){
    
    
        xq = 1;
        year = year - 1;
    }
    return btoa('xn='+year+'&xq='+xq);
}

He estado buscando durante mucho tiempo para obtener el número de estudiante, porque no es mi número de estudiante real, sino el uid de la base de datos, así que he estado buscando en los datos de js y descubrí que la única vez que la devolución está en la página del plan de estudios, esa página está incrustada, tal vez El problema de la API de Xiaomi es difícil de localizar usando js.

  1. Tal vez puedas obtenerlo sin un número de estudiante.

Al final, dejé de transmitir los parámetros del número de estudiante, y solo pasé los parámetros del año académico y el semestre, y descubrí que también se puede obtener el plan de estudios. Supongo que el lado del servidor puede pensar que este es un parámetro prescindible (guardado en la sesión), y no se realiza ninguna verificación u otro procesamiento.

  1. Enviar solicitud de parámetros de paquete de año académico y semestre
 return await request('get', 'gbk','http://jwgl.hist.edu.cn/wsxk/xkjg.ckdgxsxdkchj_data10319.jsp?params='+getParam());

Aquí uso btoa()la función para la transcodificación base64

3. Resultados:

inserte la descripción de la imagen aquí

Finalmente mejoré la interfaz de adquisición de información del plan de estudios pasando manualmente los parámetros de xh y xq.

Este artículo tiene como objetivo registrar el mismo proceso de obtención de parámetros de interfaz.

El código completo de adquisición de información es el siguiente:

  1. El plan de estudios de Xiaoai se adapta al albergue
  2. Plan de estudios de Xiaoai adaptado a github
async function scheduleHtmlProvider(iframeContent = "", frameContent = "", dom = document) {
    
    
    return await request('get', 'gbk','http://jwgl.hist.edu.cn/wsxk/xkjg.ckdgxsxdkchj_data10319.jsp?params='+getParam());
}
async function request(tag, encod, url) {
    
    
    let formatText = (text, encoding) => {
    
    
        return new Promise((resolve, reject) => {
    
    
            const fr = new FileReader()
            fr.onload = (event) => {
    
    
                resolve(fr.result)
            }

            fr.onerror = (err) => {
    
    
                reject(err)
            }

            fr.readAsText(text, encoding)
        })
    }
    return await fetch(url, {
    
     method: tag })
        .then((rp) => rp.blob().then((v) => formatText(v, encod)))
        .then((v) => v)
        .catch((er) => er)
}
function getParam(){
    
    
    const date = new Date();
    let year = date.getFullYear();//获取完整的年份(4位)
    const month = date.getMonth() + 1; //获取当前月份(0-11,0代表1月)
    let xq = 0;
    if(month < 7){
    
    
        xq = 1;
        year = year - 1;
    }
    return btoa('xn='+year+'&xq='+xq);

}


Supongo que te gusta

Origin blog.csdn.net/faker1234546/article/details/131558974
Recomendado
Clasificación