使用的是机器翻译专业版调用接口
核心代码
加密和发送请求核心代码,需要npm安装uuid模块和axios
// 导入crypto加密模块
const crypto = require('crypto');
// 导入axios用于发送请求
const axios = require('axios');
module.exports = function sendPost(url, body, ac_id, ac_secret) {
const realUrl = new URL(url);
// 下面字段用于进行加密签名
const method = "POST"
const accept = "application/json"
const content_type = "application/json;chrset=utf-8"
const path = realUrl.pathname
const date = new Date().toGMTString()
const host = realUrl.host
// 将请求体进行MD5加密和Base64编码
const bodyMd5 = MD5Base64Encode(body);
console.log("1.加密后的请求体:", bodyMd5);
// 生成唯一随机值
const uuid = uuidv4();
console.log("2.唯一随机值:", uuid);
// 请求头SHA-1加密
const arr = [method, accept, bodyMd5, content_type, date, "x-acs-signature-method:HMAC-SHA1", "x-acs-signature-nonce:" + uuid, "x-acs-version:2019-01-02", path]
const stringToSign = arr.join("\n");
// 2. 计算 HMAC-SHA1
const signature = HMACSha1(stringToSign, ac_secret);
console.log("4.计算后的HMAC-SHA1:", signature);
// 3. 获得最终的Authorization
const authHeader = "acs " + ac_id + ":" + signature;
// 请求配置
const config = {
method,
url,
headers: {
'Accept': accept,
'Content-Type': content_type,
'Content-MD5': bodyMd5,
'Date': date,
'Host': host,
'Authorization': authHeader,
'x-acs-signature-nonce': uuid,
'x-acs-signature-method': 'HMAC-SHA1',
'x-acs-version': '2019-01-02',
},
data: body
};
axios(config).then(function (response) {
console.log(response.data);
}).catch(function (error) {
console.log(error);
console.log("请求失败");
})
}
/**
* 将内容进行MD5加密后在进行Base64编码
* @param {*} str 要加密的字符串
*/
function MD5Base64Encode(str) {
if (!str) {
console.log("加密的内容为空!!!");
return "";
}
// 创建md5对象
const md5 = crypto.createHash('md5');
// 得到MD5的十六进制字符串
const md5Hash = md5.update(str).digest('hex');
// 将MD5的十六进制字符串转换为Base64编码
const strMd5 = Buffer.from(md5Hash, 'hex').toString('base64');
return strMd5;
}
/**
* 计算 HMAC-SHA1
* @param {*} data 要加密的数据
* @param {*} key key值
*/
function HMACSha1(data, key) {
// 创建一个HMAC-SHA1对象
const hmac = crypto.createHmac('sha1', key);
// 计算HMAC-SHA1
const md5Hash = hmac.update(data).digest();
// 最终签名
const signature = Buffer.from(md5Hash, "hex").toString('base64');
return signature;
}
/**
* 生成一个唯一的UUID
* @returns uuid
*/
function uuidv4() {
const { v4: uuidv4 } = require('uuid');
return uuidv4();
}
调用示例
const sendPost = require('./Sender');
// 这两个字段去阿里云获取
const ac_id = "";
const ac_secret = "";
// 专业版请求地址 通用版是http://mt.cn-hangzhou.aliyuncs.com/api/translate/web/general没调用成功
const url = "http://mt.cn-hangzhou.aliyuncs.com/api/translate/web/ecommerce"
// 请求体
const body = {
// 要翻译的内容
FormatType: "text",
// 源语言
SourceLanguage: "zh",
// 目标语言
TargetLanguage: "en",
SourceText: "成功调用阿里云的接口,我太厉害了",
// 翻译场景
Scene: "title"
}
sendPost(url, JSON.stringify(body), ac_id, ac_secret)