阿里云机器翻译HTTP调用Node示例代码

本文介绍了如何使用Node.js中的axios库,配合MD5和HMAC-SHA1算法对请求体进行加密,并添加签名,以调用阿里云机器翻译API的过程,包括生成唯一UUID和设置请求头。
摘要由CSDN通过智能技术生成

使用的是机器翻译专业版调用接口

核心代码

加密和发送请求核心代码,需要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)

响应结果 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值