猿人學2023第一題:利用協(xié)議獲取全部5頁全部數(shù)字之和
題目地址:aHR0cHM6Ly9tYXRjaDIwMjMueXVhbnJlbnh1ZS5jbi90b3BpYy8x
一、頁面調(diào)試
? ? ? ? 1)在控制臺搜索接口名稱可以很容易定位到發(fā)送請求的地方,代碼可讀性比較好,可以直接在相關函數(shù)內(nèi)打上斷點;
? ? ? ? 2)點擊頁碼觸發(fā)請求邏輯,在右側面板可以看到相關的變量。

? ? ? ? 請求總共需要傳3個參數(shù)“now、page、token”,其中,now(當前時間戳)和page(當前頁碼)比較簡單,主要是提取token的生成方法;
? ? ? ? 從代碼中可以知道 token 的計算公式為:MD5(AES(now + page)),意即:將時間戳和頁碼的字符串進行拼接,再對拼接后的字符串進行AES加密,接著對AES加密后的字符串內(nèi)容進行MD5計算。
? ? ? ? 起初,我直接使用網(wǎng)上公共的AES加密方法來實現(xiàn)代碼,但發(fā)現(xiàn)請求會報錯“token無效”,這時才恍然網(wǎng)站的AES加密是不同的。
二、代碼實現(xiàn)
? ? ? ? 代碼的關鍵點主要是提取AES加密方法,這里有兩個方案:
? ? ? ? 方案一
? ? ? ? 在正式發(fā)送請求之前,可以在斷點調(diào)試過程中,將AES加密的方法右鍵存為全局變量,以便在后續(xù)的函數(shù)中使用。這種方式有點討巧,不用去花太多時間在去提取代碼。

? ? ? ? 方案二
? ? ? ? 提取加密相關代碼。好在代碼都集中在 /corejs/match1.js 文件中。經(jīng)過分析,其實修改的內(nèi)容并不多,只需將第34~75行之間的Ajax請求做些許調(diào)整。
? ? ? ? 1)去除了初始化時對call函數(shù)的調(diào)用;
? ? ? ? 2)修改Ajax請求成功后的回調(diào)函數(shù)。
? ? ? ? 修改后的代碼執(zhí)行完成后,會在全局生成一個名為call的函數(shù),這個函數(shù)就是用來請求頁面數(shù)據(jù)的。