postman數(shù)據(jù)加解密實(shí)現(xiàn)APP登入接口模擬請(qǐng)求
主要使用到的Postman功能
- 環(huán)境變量:只要新建就好了,操作都是在代碼中處理的。
- 日志查看:菜單位置:View → show postman console ,顯示這個(gè)窗口視圖就可以了
- 請(qǐng)求時(shí)執(zhí)行的腳本:Pre-request Script 標(biāo)簽頁(yè),使用語(yǔ)言javascript, 通常作為加密。
- 接受返回時(shí)執(zhí)行的腳本:Tests 標(biāo)簽頁(yè),作為返回參數(shù)的處理,通常為解密。
數(shù)據(jù)加解密
接口要求對(duì)params的數(shù)據(jù),已json形式進(jìn)行加密發(fā)送。
各種參數(shù)設(shè)置
- 明文的參數(shù)填寫(xiě):
這里的參數(shù)是之后腳本使用的基礎(chǔ)數(shù)據(jù),也可以類(lèi)似相當(dāng)于APP登入界面需要填寫(xiě)的數(shù)據(jù)。
- 請(qǐng)求頭參數(shù)填寫(xiě):
這里的請(qǐng)求頭數(shù)據(jù),為系統(tǒng)接口約定的一些既定規(guī)則參數(shù)。
真正發(fā)送的數(shù)據(jù):
對(duì),就一個(gè)參數(shù),具體的參數(shù)在腳本處理之后,進(jìn)行加密之后,也就是一個(gè)很長(zhǎng)的字符串 ╮(╯_╰)╭
請(qǐng)求處理腳本[Pro-request Script]
腳本的處理直接看代碼即可。
腳本常用的一些封裝類(lèi)是postman封裝的,比如:
- 環(huán)境變量:pm.environmen
- t數(shù)據(jù)加密工具包:CryptoJS
- 數(shù)學(xué)函數(shù)工具包:Math
【在代碼編寫(xiě)框邊上,有postman提供的常用操作代碼生成,灰常好用的】
具體的代碼:
// 設(shè)置環(huán)境變量參數(shù),用于其他請(qǐng)求使用 pm.environment.set("lkm-sys-id",pm.request.headers.get("lkm-sys-id")); pm.environment.set("lkm-app-id",pm.request.headers.get("lkm-app-id")); pm.environment.set("lkm-organ-id",pm.request.headers.get("lkm-organ-id")); pm.environment.set("lkm-app-ver",pm.request.headers.get("lkm-app-ver")); // json化參數(shù),用于數(shù)據(jù)簽名 const paramsString = request.url.split('?')[1]; const eachParamArray = paramsString.split('&'); let params = {}; eachParamArray.forEach((param) => { const key = param.split('=')[0]; const value = param.split('=')[1]; Object.assign(params, {[key]: value}); }); console.log(params); // 數(shù)據(jù)的處理 var requestParams = params; console.log(requestParams); // 接口定義的數(shù)據(jù)簽名處理 var timestamp = Math.round(new Date()); pm.environment.set("timestamp",timestamp); var shuijishu = "XO337hNxWyNsOlDw"; pm.environment.set("shuijishu",shuijishu); // 數(shù)據(jù)簽名,系統(tǒng)接口約定的 var lkmSign = pm.request.headers.get("lkm-sys-id") + pm.request.headers.get("lkm-app-id") + "1122334455667788" + timestamp + shuijishu + "" ; pm.environment.set("lkmSign",CryptoJS.MD5(lkmSign).toString().toUpperCase()); // ================== 數(shù)據(jù)簽名處理結(jié)束 =================================== // ===================== 加解密數(shù)據(jù) ========================================== /// aesdata 處理 var aesData = dealWithAesData(requestParams); pm.environment.set("data", aesData); // 這個(gè)就是上面截圖被用到的最終發(fā)送的需要的數(shù)據(jù) /// ↓↓↓↓↓↓↓↓↓↓↓↓ 常用AES加解密方法 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ /// // aesData數(shù)據(jù)處理 (content 傳字典) function dealWithAesData(content) { console.log('aesData明文: ' + JSON.stringify(content)); const key = CryptoJS.enc.Utf8.parse("****************"); const iv = CryptoJS.enc.Utf8.parse("0000000000000000"); const encrypted = CryptoJS.AES.encrypt(JSON.stringify(content), key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); //CBC return encrypted.toString(); }
響應(yīng)處理腳本[Tests]
- 響應(yīng)數(shù)據(jù),處理就是解密顯示了。
- 需要關(guān)注的:postman提供各種斷言的操作,可以很好顯示測(cè)試結(jié)果。
具體的代碼:
// 返回?cái)?shù)據(jù)處理 var jsonData = JSON.parse(responseBody); var responseData = JSON.parse(decryptResponseData(jsonData.data)); // 數(shù)據(jù)解密 let success = responseData['success']; var responseResult = responseData["data"]; // 數(shù)據(jù)token記錄,左右后續(xù)接口使用的 try { let token = responseResult["token"]; pm.environment.set("token", "Bearer "+token); console.log("token:" + token); } catch (err) { tests['Expect response data to be valid token'] = false; tests[`Response data: ${responseResult}`] = true; console.error(err); } // 數(shù)據(jù)日志打印 console.log("jsonData:以下對(duì)象是響應(yīng)數(shù)據(jù)") console.log(jsonData); console.log("responseData:以下對(duì)象是解析的第一層數(shù)據(jù)") console.log(responseData); console.log("responseResult:以下對(duì)象是解析的第二層數(shù)據(jù)") console.log(responseResult); // 環(huán)境變量設(shè)置,用于登入后,其他接口使用。 console.log(responseResult.agentId); pm.environment.set("agentId",responseResult.agentId); pm.environment.set("agentCode",responseResult.agentCode); pm.environment.set("agentName",responseResult.agentName); // pm.environment.set("token",responseResult.token); // 設(shè)置斷言 postman面上提供好個(gè)通用的斷言生成,可以試試 tests["業(yè)務(wù)返回碼code=200,成功!"] = responseData.code === 200 ; /// 解密返回?cái)?shù)據(jù) function decryptResponseData(content) { const key = CryptoJS.enc.Utf8.parse("*****************"); const iv = CryptoJS.enc.Utf8.parse("0000000000000000"); const decrypt = CryptoJS.AES.decrypt(content, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8); return decryptedStr.toString(); }
結(jié)果的樣子
模擬加密接口的請(qǐng)求差不多就這個(gè)樣子了,至于別的操作,就要以后再學(xué)習(xí)了,更多關(guān)于postman登入APP接口請(qǐng)求的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
TypeScript實(shí)現(xiàn)十大排序算法之冒泡排序示例詳解
這篇文章主要為大家介紹了TypeScript實(shí)現(xiàn)十大排序算法之冒泡排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02TypeScript判斷對(duì)稱的二叉樹(shù)方案詳解
這篇文章主要為大家介紹了TypeScript判斷對(duì)稱的二叉樹(shù)方案實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09TypeScript類(lèi)型級(jí)別和值級(jí)別示例詳解
這篇文章主要為大家介紹了TypeScript類(lèi)型級(jí)別和值級(jí)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02typescript在vue中的入門(mén)案例代碼demo
這篇文章主要介紹了typescript在vue中的入門(mén)案例代碼demo,使用技術(shù)棧vue2+typescript+scss入門(mén)練手項(xiàng)目,天氣預(yù)報(bào)demo,需要的朋友可以參考下。2022-12-12TypeScript數(shù)據(jù)結(jié)構(gòu)鏈表結(jié)構(gòu)?LinkedList教程及面試
這篇文章主要為大家介紹了TypeScript數(shù)據(jù)結(jié)構(gòu)鏈表結(jié)構(gòu)?LinkedList教程及面試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02前端算法之TypeScript包含min函數(shù)的棧實(shí)例詳解
這篇文章主要為大家介紹了前端算法之TypeScript包含min函數(shù)的棧實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09高級(jí)前端面試手寫(xiě)扁平數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)Tree
這篇文章主要為大家介紹了高級(jí)前端面試手寫(xiě)扁平數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)Tree示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06TypeScript十大排序算法插入排序?qū)崿F(xiàn)示例詳解
這篇文章主要為大家介紹了TypeScript十大排序算法插入排序?qū)崿F(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02TypeScript中的聯(lián)合類(lèi)型使用示例詳解
這篇文章主要為大家介紹了TypeScript中的聯(lián)合類(lèi)型使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08與ChatGPT結(jié)對(duì)編程實(shí)現(xiàn)代碼詳解
這篇文章主要為大家介紹了與ChatGPT結(jié)對(duì)編寫(xiě)實(shí)現(xiàn)代碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03