中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

如何做網(wǎng)站的書(shū)籍百度廣告推廣怎么收費(fèi)

如何做網(wǎng)站的書(shū)籍,百度廣告推廣怎么收費(fèi),品牌建設(shè)部,wordpress小工具代碼修改前言 在做接口測(cè)試時(shí),出于安全因素,請(qǐng)求參數(shù)需要做加密或者加上簽名才能正常請(qǐng)求,例如:根據(jù)填寫(xiě)的請(qǐng)求參數(shù)進(jìn)行hash計(jì)算進(jìn)行簽名。postman作為主流的接口調(diào)試工具也是支持請(qǐng)求預(yù)處理的,即在請(qǐng)求前使用JavaScript腳本對(duì)…

前言

在做接口測(cè)試時(shí),出于安全因素,請(qǐng)求參數(shù)需要做加密或者加上簽名才能正常請(qǐng)求,例如:根據(jù)填寫(xiě)的請(qǐng)求參數(shù)進(jìn)行hash計(jì)算進(jìn)行簽名。postman作為主流的接口調(diào)試工具也是支持請(qǐng)求預(yù)處理的,即在請(qǐng)求前使用JavaScript腳本對(duì)參數(shù)進(jìn)行一些預(yù)處理然后再進(jìn)行引用。

背景

一般接口都是用Java語(yǔ)言寫(xiě)的,所以其加密算法也是Java語(yǔ)言寫(xiě)的,加密過(guò)程中可能會(huì)涉及到引用了Java相關(guān)的類庫(kù),所以在postman中進(jìn)行涉及加密接口的請(qǐng)求時(shí),需要先將Java加密算法轉(zhuǎn)換成JavaScript代碼,在轉(zhuǎn)換過(guò)程中就可能引用到JS的類庫(kù)。那么怎么在Postman中引用JS類庫(kù)呢?假設(shè)我們要在Postman中引用CryptoJS庫(kù)。

將Java代碼轉(zhuǎn)換為js代碼

有以下Java簽名算法

package org.example;import org.apache.commons.codec.digest.DigestUtils;
import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.Map.Entry;/**Unit test for simple App. */ 
public class AppTest
{
public static String veritySign(SortedMap<String, Object> parameters, String key) {StringBuffer sbkey = new StringBuffer();Set es = parameters.entrySet();Iterator it = es.iterator();String md5a;while (it.hasNext()) {Entry entry = (Entry) it.next();md5a = (String) entry.getKey();Object v = entry.getValue();if (null != v && !"".equals(v)) {sbkey.append(md5a + "=" + v + "&");}}sbkey = sbkey.append("key=" + key);String sbString = sbkey.toString();md5a = "";String content = sbkey.toString();char[] chars = content.toCharArray();String charset = "utf-8";int sum = 0;char[] var12 = chars;int i = chars.length;for (int var14 = 0; var14 < i; ++var14) {char aChar = var12[var14];sum += Integer.valueOf(aChar);}int num = sum % 3 + 3;for (i = 0; i < num; ++i) {try {content = DigestUtils.md5Hex(content.getBytes(charset)).toUpperCase();} catch (UnsupportedEncodingException var16) {var16.printStackTrace();}}md5a = content;System.out.println(md5a);return md5a;
}public static void main(String[] args) {String channelId = "12345678";String pid = "beijing";Long time = System.currentTimeMillis();String brand="Apple";String modal="iPhone 15 pro";String key = "123dzW127725c47534bdeqf6726de68z";//請(qǐng)求參數(shù)信息SortedMap<String, Object> paramMap = new TreeMap<>();paramMap.put("modelCode", brand + " " + modal);paramMap.put("channelId", channelId);paramMap.put("pid", pid);paramMap.put("time", time);veritySign(paramMap, key);
}
}

轉(zhuǎn)換為JS代碼:

// 引入 CryptoJS 模塊
function veritySign(parameters, key) {let sbkey = '';for (const [keyParam, value] of Object.entries(parameters)) {if (value !== null && value !== '') {sbkey += keyParam + '=' + value + '&';}}sbkey += 'key=' + key;let content = sbkey;let chars = content.split('');let sum = 0;for (let i = 0; i < chars.length; i++) {let aChar = chars[i];sum += aChar.charCodeAt(0);}let num = sum % 3 + 3;for (let i = 0; i < num; i++) {try {content = CryptoJS.MD5(content).toString().toUpperCase();} catch (error) {console.error(error);}}let md5a = content;console.log(md5a);return md5a;
}// 測(cè)試用例
(function main() {const channelId = '12345678';const pid = 'beijing';const time = Date.now();const brand = 'Apple';const modal = 'iPhone 15 pro';const key = '123dzW127725c47534bdeqf6726de68z';// 請(qǐng)求參數(shù)信息const paramMap = {modelCode: brand + ' ' + modal,channelId: channelId,pid: pid,time: time};const signature = veritySign(paramMap, key);console.log('Signature:', signature);
})();

請(qǐng)注意以下幾點(diǎn):

  1. CryptoJS: 我們假設(shè)您已經(jīng)在項(xiàng)目中包含了 CryptoJS 庫(kù),并且可以通過(guò) require 或者 script標(biāo)簽引入它。
  2. Date.now(): JavaScript 中獲取當(dāng)前時(shí)間戳的方法與 Java 中System.currentTimeMillis() 相當(dāng)。
  3. SortedMap: 在 JavaScript 中,我們使用
    Object.entries 和 for…of 循環(huán)來(lái)遍歷對(duì)象的鍵值對(duì)。由于 JavaScript 的 Object.entries返回的數(shù)組默認(rèn)就是按添加順序排序的,因此不需要額外的排序。
  4. 編碼問(wèn)題: JavaScript中處理字符串編碼通常不是問(wèn)題,因?yàn)樽址且?UTF-16 編碼的,但如果您需要明確地處理編碼問(wèn)題,可以使用 TextEncoder類(在現(xiàn)代瀏覽器中可用)或者第三方庫(kù)如 Buffer (Node.js 中可用)。
  5. 測(cè)試用例: 我將 Java 中的main 方法轉(zhuǎn)換成了一個(gè)立即執(zhí)行的函數(shù)表達(dá)式 (IIFE),用于測(cè)試 veritySign 函數(shù)。

您可以將這段代碼放在一個(gè) HTML 文件中并運(yùn)行它,或者在 Node.js 環(huán)境中運(yùn)行它,只要確保 CryptoJS 庫(kù)已經(jīng)被正確加載。
這里是修改后的代碼,用于在 Postman 的預(yù)請(qǐng)求腳本中使用 CryptoJS:

在postman中進(jìn)行引用

在 Postman 的預(yù)請(qǐng)求腳本中,您不能使用 window 對(duì)象(瀏覽器對(duì)象),因?yàn)轭A(yù)請(qǐng)求腳本是在 Node.js 環(huán)境中運(yùn)行的,而不是在瀏覽器環(huán)境中運(yùn)行的。因此,window 對(duì)象是不可用的。您應(yīng)該直接使用 require 來(lái)加載 CryptoJS 模塊。

步驟 1: 安裝 CryptoJS

首先,確保您已經(jīng)在本地機(jī)器上安裝了 Node.js 和 npm。然后,安裝 CryptoJS 模塊:

npm install crypto-js

步驟 2: 在 Postman 中引用 CryptoJS

接下來(lái),在 Postman 的預(yù)請(qǐng)求腳本中引用 CryptoJS:
在這里插入圖片描述
測(cè)試腳本需要做一點(diǎn)點(diǎn)改動(dòng),需要將簽名字符串設(shè)置成postman全局變量在請(qǐng)求體中引用:

// 將生成的簽名存儲(chǔ)到全局變量中
pm.globals.set("sign", sign);

postman完整pre request代碼

// 引入 CryptoJS 模塊
var CryptoJS = require('crypto-js');// 修改后的 veritySign 函數(shù)
function veritySign(parameters, key) {let sbkey = '';for (const [key, value] of Object.entries(parameters)) {if (value !== null && value !== '') {sbkey += key + '=' + value + '&';}}sbkey += 'key=' + key;let sbString = sbkey;let content = sbkey;let chars = content.split('');let sum = 0;for (let i = 0; i < chars.length; i++) {let aChar = chars[i];sum += aChar.charCodeAt(0);}let num = sum % 3 + 3;for (let i = 0; i < num; i++) {try {content = CryptoJS.MD5(content).toString().toUpperCase();} catch (error) {console.error(error);}}let md5a = content;console.log(md5a);return md5a;
}// 初始化參數(shù)const channelId = '12345678';const pid = 'beijing';const time = Date.now();const brand = 'Apple';const modal = 'iPhone 15 pro';const key = '123dzW127725c47534bdeqf6726de68z';let paramMap = {modelCode: brand + ' ' + modal,channelId: channelId,pid: pid,time: time
};// 調(diào)用 veritySign 函數(shù)
let sign = veritySign(paramMap, key);// 將生成的簽名存儲(chǔ)到全局變量中
pm.globals.set("sign", sign);

注意事項(xiàng)

  1. 確保 CryptoJS 已經(jīng)安裝:確保您已經(jīng)在本地機(jī)器上安裝了 CryptoJS 模塊。
  2. 使用 require 導(dǎo)入模塊:在 Postman 的預(yù)請(qǐng)求腳本中使用 require 來(lái)導(dǎo)入 CryptoJS 模塊。
  3. 異步問(wèn)題:上述代碼中的 veritySign 函數(shù)是同步的,這意味著它會(huì)在 Postman 的預(yù)請(qǐng)求腳本中立即執(zhí)行。如果您需要處理異步操作,可以使用回調(diào)函數(shù)或 Promise 來(lái)實(shí)現(xiàn)。

按照上述步驟,您應(yīng)該能夠在 Postman 的預(yù)請(qǐng)求腳本中使用 CryptoJS 并生成所需的簽名。

測(cè)試

打開(kāi)postman控制臺(tái),點(diǎn)擊待測(cè)接口并請(qǐng)求,查看控制臺(tái)日志打印:
在這里插入圖片描述
可以看到請(qǐng)求簽名是OK的,這樣我們就能在請(qǐng)求body中引用了:

在這里插入圖片描述

http://www.risenshineclean.com/news/8565.html

相關(guān)文章:

  • 無(wú)錫設(shè)計(jì)公司有哪些廊坊百度推廣seo
  • 越南網(wǎng)站建設(shè)營(yíng)銷(xiāo)型網(wǎng)站重要特點(diǎn)是
  • 濰坊網(wǎng)站建設(shè)費(fèi)用十大最靠譜it培訓(xùn)機(jī)構(gòu)
  • 韓國(guó)有哪些專業(yè)做汽車(chē)的網(wǎng)站?sem代運(yùn)營(yíng)公司
  • 有關(guān)做內(nèi)購(gòu)的網(wǎng)站岳陽(yáng)seo公司
  • 不知此網(wǎng)站枉做男人百度推廣一個(gè)月多少錢(qián)
  • c 做彩票網(wǎng)站seo關(guān)鍵詞排名優(yōu)化系統(tǒng)源碼
  • 網(wǎng)站廣告設(shè)計(jì)怎么做精準(zhǔn)推廣的渠道有哪些
  • 企業(yè)郵箱怎么注冊(cè)?廣州王牌seo
  • 什么網(wǎng)站不用備案外鏈網(wǎng)址
  • qt做網(wǎng)站界面購(gòu)物鏈接
  • 政府網(wǎng)站的域名合肥關(guān)鍵詞排名技巧
  • 國(guó)家建筑規(guī)范標(biāo)準(zhǔn)網(wǎng)整站優(yōu)化系統(tǒng)廠家
  • 專業(yè)瓷磚美縫網(wǎng)站怎么做查詢網(wǎng)址域名ip地址
  • wordpress用戶10億seo是什么意思蜘蛛屯
  • 政府部門(mén)網(wǎng)站建設(shè)方案騰訊新聞發(fā)布平臺(tái)
  • 湖南人文科技學(xué)院鄭州谷歌優(yōu)化外包
  • 網(wǎng)站怎么做流量2022國(guó)內(nèi)外重大新聞事件10條
  • 怎樣做網(wǎng)站手機(jī)和電腦通用汕頭seo排名公司
  • wordpress破解百度seo優(yōu)化排名客服電話
  • 網(wǎng)站收錄量低怎么做常德網(wǎng)站設(shè)計(jì)
  • 中國(guó)企業(yè)500強(qiáng)江陰有幾家寧波seo外包公司
  • 做非法集資資訊的網(wǎng)站世界杯積分榜排名
  • 企業(yè)做網(wǎng)站維護(hù)價(jià)格專業(yè)seo優(yōu)化公司
  • 網(wǎng)站制作接單市場(chǎng)調(diào)研報(bào)告范文2000
  • 如何做獨(dú)立站個(gè)人網(wǎng)站推廣怎么做
  • 網(wǎng)站開(kāi)發(fā)湛江西安搜索引擎優(yōu)化
  • 網(wǎng)站部分頻道完全不收錄了怎么做百度指數(shù)查詢移動(dòng)版
  • 全球50個(gè)大網(wǎng)站開(kāi)發(fā)語(yǔ)言昆明抖音推廣
  • 珠海市住房建設(shè)局網(wǎng)站十大外貿(mào)平臺(tái)