perf:resetCookie加锁
This commit is contained in:
父節點
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) {
|
||||||
|
載入中…
x
新增問題並參考
Block a user