欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

postman數據加解密實現APP登入接口模擬請求

 更新時間:2021年08月18日 11:48:38   作者:小_杭  
對于Postman的使用,一般情況下只要發(fā)發(fā)確定的請求與參數就可以的了,然而,在使用的時候,尤其是接口測試時,請求接口的設計里面都有數據加密,參數驗簽,返回數據也有進行加密的,這個時候就需要使用一些腳本做處理,模擬app登入請求的操作

主要使用到的Postman功能

  • 環(huán)境變量:只要新建就好了,操作都是在代碼中處理的。
  • 日志查看:菜單位置:View → show postman console ,顯示這個窗口視圖就可以了
  • 請求時執(zhí)行的腳本:Pre-request Script 標簽頁,使用語言javascript, 通常作為加密。
  • 接受返回時執(zhí)行的腳本:Tests 標簽頁,作為返回參數的處理,通常為解密。

簡要界面

數據加解密

接口要求對params的數據,已json形式進行加密發(fā)送。

各種參數設置

  • 明文的參數填寫:

這里的參數是之后腳本使用的基礎數據,也可以類似相當于APP登入界面需要填寫的數據。

接口參數 

  • 請求頭參數填寫:

這里的請求頭數據,為系統接口約定的一些既定規(guī)則參數。

請求頭參數 

真正發(fā)送的數據:

對,就一個參數,具體的參數在腳本處理之后,進行加密之后,也就是一個很長的字符串 ╮(╯_╰)╭

body數據.

請求處理腳本[Pro-request Script]

腳本的處理直接看代碼即可。

腳本常用的一些封裝類是postman封裝的,比如:

  • 環(huán)境變量:pm.environmen
  • t數據加密工具包:CryptoJS
  • 數學函數工具包:Math

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

具體的代碼:

// 設置環(huán)境變量參數,用于其他請求使用
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.environment.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);  // 這個就是上面截圖被用到的最終發(fā)送的需要的數據

///  ↓↓↓↓↓↓↓↓↓↓↓↓   常用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記錄,左右后續(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);
}

// 數據日志打印
console.log("jsonData:以下對象是響應數據")
console.log(jsonData);
console.log("responseData:以下對象是解析的第一層數據")
console.log(responseData);
console.log("responseResult:以下對象是解析的第二層數據")
console.log(responseResult);

// 環(huán)境變量設置,用于登入后,其他接口使用。
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["業(yè)務返回碼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, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
    const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
}

結果的樣子

最終數據

模擬加密接口的請求差不多就這個樣子了,至于別的操作,就要以后再學習了,更多關于postman登入APP接口請求的資料請關注腳本之家其它相關文章!

相關文章

  • TypeScript實現十大排序算法之冒泡排序示例詳解

    TypeScript實現十大排序算法之冒泡排序示例詳解

    這篇文章主要為大家介紹了TypeScript實現十大排序算法之冒泡排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • TypeScript判斷對稱的二叉樹方案詳解

    TypeScript判斷對稱的二叉樹方案詳解

    這篇文章主要為大家介紹了TypeScript判斷對稱的二叉樹方案實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • TypeScript類型級別和值級別示例詳解

    TypeScript類型級別和值級別示例詳解

    這篇文章主要為大家介紹了TypeScript類型級別和值級別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • typescript在vue中的入門案例代碼demo

    typescript在vue中的入門案例代碼demo

    這篇文章主要介紹了typescript在vue中的入門案例代碼demo,使用技術棧vue2+typescript+scss入門練手項目,天氣預報demo,需要的朋友可以參考下。
    2022-12-12
  • TypeScript數據結構鏈表結構?LinkedList教程及面試

    TypeScript數據結構鏈表結構?LinkedList教程及面試

    這篇文章主要為大家介紹了TypeScript數據結構鏈表結構?LinkedList教程及面試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 前端算法之TypeScript包含min函數的棧實例詳解

    前端算法之TypeScript包含min函數的棧實例詳解

    這篇文章主要為大家介紹了前端算法之TypeScript包含min函數的棧實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 高級前端面試手寫扁平數據結構轉Tree

    高級前端面試手寫扁平數據結構轉Tree

    這篇文章主要為大家介紹了高級前端面試手寫扁平數據結構轉Tree示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • TypeScript十大排序算法插入排序實現示例詳解

    TypeScript十大排序算法插入排序實現示例詳解

    這篇文章主要為大家介紹了TypeScript十大排序算法插入排序實現示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • TypeScript中的聯合類型使用示例詳解

    TypeScript中的聯合類型使用示例詳解

    這篇文章主要為大家介紹了TypeScript中的聯合類型使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 與ChatGPT結對編程實現代碼詳解

    與ChatGPT結對編程實現代碼詳解

    這篇文章主要為大家介紹了與ChatGPT結對編寫實現代碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03

最新評論