forked from juzheng/sdu-course-bot
		
	perf:resetCookie加锁
This commit is contained in:
		| @@ -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) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user