1. 程式人生 > 程式設計 >postman資料加解密實現APP登入介面模擬請求

postman資料加解密實現APP登入介面模擬請求

目錄
  • 主要使用到的Postman功能
  • 資料加解密
  • 各種引數設定
  • 真正傳送的資料:
  • 請求處理[Pro-request Script]
  • 響應處理指令碼[Tests]
  • 結果的樣子

主要使用到的Postman功能

  • 環境變數:只要新建就好了,操作都是在程式碼中處理的。
  • 日誌檢視:選單位置:View → show postman console ,顯示這個視窗檢視就可以了
  • 請求時執行的指令碼:Pre-request Script 標籤頁,使用語言, 通常作為加密。
  • 接受返回時執行的指令碼:Tests 標籤頁,作為返回引數的處理,通常為解密。

簡要介面

資料加解密

介面要求對params的資料,已on形式進行加密傳送。

各種引數設定

  • 明文的引數填寫:

這裡的引數是之後指令碼使用的基礎資料,也可以類似相當於APP登入介面需要填寫的資料www.cppcns.com

介面引數

  • 請求頭引數填寫:

這裡的請求頭資料,為系統介面約定的一些既定規則引數。

請求頭引數

真正傳送的資料:

對,就一個引數,具體的引數在指令碼處理之後,進行加密之後,也就是一個很長的字串 ╮(╯_╰)╭

body資料.

請求處理指令碼[Pro-request Script]

指令碼的處理直接看程式碼即可。

指令碼常用的一些封裝類是postman封裝的,比如:

  • 環境變數:pm.environmen
  • t資料加密工具包:CryptoJS
  • 數學函式工具包:Math

【在程式碼編寫框邊上,有postman提供的常用操作程式碼生成,灰常好用的】

具體的程式碼:

// 設定環境變數引數,用於其他請求使用
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化引數,用於資料簽名
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);

// 資料的處理
var requestParams = params;
console.log(requestParams);

// 介面定義的資料簽名處理
var timestamp = Math.round(new Date());
pm.enviro
nment.set("timestamp",timestamp); var shuijishu = "XO337hNxWyNsOlDw"; pm.environment.set("shuijishu",shuijishu); // 資料簽名,系統接口約定的 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()); // ================== 資料簽名處理結束 =================================== // ===================== 加解密資料 ========================================== /// aesdata 處理 var aesData = dealWithAesData(requestParams); pm.environment.set("data",aesData); // 這個就是上面截圖被用到的最終傳送的需要的資料 /// ↓↓↓↓↓↓↓↓↓↓↓↓ 常用AES加解密方法 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ /// // aesData資料處理 (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(); }

響應處理指令碼[Tests]

  • 響應資料,處理就是解密顯示了。
  • 需要關注的:postman提供各種斷言的操作,可以很好顯示測試結果。

具體的程式碼:

// 返回資料處理
var jsonData = JSON.parse(responseBody);
var responseData = JSON.parse(decryptResponseData(jsonData.data)); // 資料解密
let success = responseData['success'];
var responseResult = responseData["data"];

// 資料token記錄,左右後續介面使用的
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);
}

// 資料日誌列印
console.log("jsonData:以下物件是響應資料")
console.log(jsonData);
console.log("responseData:以下物件是解析的第一層資料")
console.log(responseData);
console.log("responseResult:以下物件是解析的第二層資料")
console.log(responseResult);

// 環境變數設定,用於登入後,其他介面使用。
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);

// 設定斷言 postman面上提供好個通用的斷言生成,可以試試
tests["業務返回碼code=200,成功!"] = responseData.code === 200 ;

/// 解密返回資料
function decryptResponseData(content) {
    const key = CryptoJS.enc.Utf8.parse("*****************");
    const iv = CryptoJS.enc.Utf8.parse("0000000000000000");
    const decrypt = CryptoJS.AES.decrypt(content,padding: CryptoJS.pad.Pkcs7 });
    const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
}

結果的樣子

最終資料

模擬加密介面的請求差不多就這個樣子了,至於別的操作,就要以後再學習了,更多關於postman登入APP介面請求的資料請關注我們其它相關文章!