You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何AWS Lambda中Axios调用外部API返回编码字符?

解决AWS Lambda中Axios调用JIRA API返回乱码的问题

问题原因

这种乱码通常是因为JIRA API返回了gzip压缩的响应,但AWS Lambda环境下的Axios默认未自动处理解压,导致原始压缩数据被直接输出,出现异常编码字符。Postman和本地Express服务器会自动处理gzip解压,所以能正常显示JSON。

解决方案

方案1:配置Axios自动处理压缩

在Axios请求配置中添加Accept-Encoding头,并显式开启自动解压(确保Lambda环境下Axios能识别并处理压缩响应):

let response = await axios.post(
  'https://jira.com/rest/api/2/issue', 
  payload, 
  {
    auth: {
      username: process.env.JIRA_USER,
      password: process.env.JIRA_PASS
    },
    headers: {
      'Accept-Encoding': 'gzip, deflate'
    },
    decompress: true // 显式开启自动解压
  },
);

console.log(response.data)

方案2:手动解压响应数据

如果方案1无效,可通过Node.js的zlib模块手动解压二进制响应数据:

const zlib = require('zlib');
const { promisify } = require('util');
const gunzip = promisify(zlib.gunzip);

let response = await axios.post(
  'https://jira.com/rest/api/2/issue', 
  payload, 
  {
    auth: {
      username: process.env.JIRA_USER,
      password: process.env.JIRA_PASS
    },
    responseType: 'arraybuffer' // 以二进制格式获取原始响应
  },
);

// 判断响应是否为gzip压缩格式并解压
if (response.headers['content-encoding'] === 'gzip') {
  const decompressedData = await gunzip(response.data);
  const jsonData = JSON.parse(decompressedData.toString('utf8'));
  console.log(jsonData);
} else {
  console.log(response.data);
}

方案3:对齐Lambda与本地的Node.js版本

确保Lambda使用的Node.js LTS版本(如18.x或20.x)与本地测试环境一致,部分旧版本Node.js的HTTP模块对压缩响应的处理存在兼容性差异。

内容的提问来源于stack exchange,提问作者frine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:25:35