perf:resetCookie加锁

This commit is contained in:
juzeon 2022-01-04 17:34:57 +08:00
父節點 5884aadc13
當前提交 a0ef04285e

查看文件

@ -80,8 +80,8 @@ export async function acquireCourse(course: IJsonCourse, channel: TChannel): Pro
return true return true
} else { } else {
logAndNotifyUser(resp.data.message) logAndNotifyUser(resp.data.message)
if(resp.data.message.includes('当前账号已在别处登录')){ if (resp.data.message.includes('当前账号已在别处登录')) {
await resetCookie() await resetCookie()// TODO 加锁、优化
} }
return false return false
} }
@ -97,7 +97,7 @@ export async function exitCourse(course: IJsonCourse): Promise<boolean> {
return true return true
} else { } else {
logAndNotifyUser('[exitCourse]退课失败:' + resp.data.message) logAndNotifyUser('[exitCourse]退课失败:' + resp.data.message)
if(resp.data.message.includes('当前账号已在别处登录')){ if (resp.data.message.includes('当前账号已在别处登录')) {
await resetCookie() await resetCookie()
} }
return false return false
@ -108,42 +108,55 @@ export async function exitCourse(course: IJsonCourse): Promise<boolean> {
} }
} }
let resetCookieLock = false
export async function resetCookie() { export async function resetCookie() {
let cookieJar = new tough.CookieJar() if (resetCookieLock) {
let cookieAxios = axios.create({ console.log('resetCookie 已被锁定')
headers: { return
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', }
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0' resetCookieLock = true
}, try {
timeout: 6000, let cookieJar = new tough.CookieJar()
maxRedirects: 10 let cookieAxios = axios.create({
}) headers: {
axiosCookieJarSupport(cookieAxios) 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
cookieAxios.defaults.jar = cookieJar 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0'
cookieAxios.defaults.withCredentials = true },
await cookieAxios.get('http://bkzhjx.wh.sdu.edu.cn/sso.jsp') timeout: 6000,
let casUrl = 'https://pass.sdu.edu.cn/cas/login?service=http%3A%2F%2Fbkzhjx.wh.sdu.edu.cn%2Fsso.jsp' maxRedirects: 10
let resp = await cookieAxios.get(casUrl) })
let ticket = /name="lt" value="(.*?)"/.exec(resp.data)?.[1] || null axiosCookieJarSupport(cookieAxios)
let rsa = strEnc(appConfig.username + appConfig.password + ticket, '1', '2', '3') cookieAxios.defaults.jar = cookieJar
resp = await cookieAxios.post(casUrl, qs.stringify({ cookieAxios.defaults.withCredentials = true
rsa, await cookieAxios.get('http://bkzhjx.wh.sdu.edu.cn/sso.jsp')
ul: appConfig.username.length, let casUrl = 'https://pass.sdu.edu.cn/cas/login?service=http%3A%2F%2Fbkzhjx.wh.sdu.edu.cn%2Fsso.jsp'
pl: appConfig.password.length, let resp = await cookieAxios.get(casUrl)
lt: ticket, let ticket = /name="lt" value="(.*?)"/.exec(resp.data)?.[1] || null
execution: 'e1s1', let rsa = strEnc(appConfig.username + appConfig.password + ticket, '1', '2', '3')
_eventId: 'submit' resp = await cookieAxios.post(casUrl, qs.stringify({
})) rsa,
let nextUrl = 'https://bkzhjx.wh.sdu.edu.cn' + /<a href="(.*?)">进入选课/.exec(resp.data)![1] ul: appConfig.username.length,
resp = await cookieAxios.get(nextUrl) pl: appConfig.password.length,
let xkId = /jrxk\('1','(.*?)'/.exec(resp.data)![1] lt: ticket,
nextUrl = 'https://bkzhjx.wh.sdu.edu.cn/jsxsd/xsxk/newXsxkzx?jx0502zbid=' + xkId execution: 'e1s1',
await cookieAxios.get(nextUrl) _eventId: 'submit'
await cookieAxios.get('https://bkzhjx.wh.sdu.edu.cn/jsxsd/xsxk/selectBottom?jx0502zbid=' + xkId) }))
let cookieString = cookieJar.getCookieStringSync('https://bkzhjx.wh.sdu.edu.cn/jsxsd/xsxk') let nextUrl = 'https://bkzhjx.wh.sdu.edu.cn' + /<a href="(.*?)">进入选课/.exec(resp.data)![1]
console.log('[cookie]取得Cookie:' + cookieString) resp = await cookieAxios.get(nextUrl)
appConfig.cookie = cookieString let xkId = /jrxk\('1','(.*?)'/.exec(resp.data)![1]
sduAxios.defaults.headers['Cookie'] = cookieString nextUrl = 'https://bkzhjx.wh.sdu.edu.cn/jsxsd/xsxk/newXsxkzx?jx0502zbid=' + xkId
await cookieAxios.get(nextUrl)
await cookieAxios.get('https://bkzhjx.wh.sdu.edu.cn/jsxsd/xsxk/selectBottom?jx0502zbid=' + xkId)
let cookieString = cookieJar.getCookieStringSync('https://bkzhjx.wh.sdu.edu.cn/jsxsd/xsxk')
console.log('[cookie]取得Cookie:' + cookieString)
appConfig.cookie = cookieString
sduAxios.defaults.headers['Cookie'] = cookieString
} catch (e) {
throw e
} finally {
resetCookieLock = false
}
} }
export function countStr(str: string, word: string) { export function countStr(str: string, word: string) {