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

Node.js中Axios请求响应编码异常,如何获取JSON对象?

Axios请求返回乱码,如何获取JSON格式响应?

我使用Axios发起REST调用时收到了乱码响应,代码示例如下:

try {
   const response = await axios.get("https://api.predic8.de/shop/products/");
   console.log(response.data);
}
catch (error) {
    console.log(`[Error] -> ${JSON.stringify(error.response.data)}`)
}

返回的乱码内容如下:

▼♥��M
�0
5�Z�z�wg�4ӎ�W�����Yjxtʸ��:�Ǐ►_�☺}Y��/�R2~♠$���Ú�V�8\�]!�)☺*����H��>�§��Aj"↕��a0 ݚ��$�颲Y3%je3@=�0��@§lb:�|�} .☺8�K&�_ƫp�j�(o-�ܚ♦

我曾尝试添加编码和Content-Type请求头,但并未解决问题,请问该如何获取JSON格式的响应对象?


解决方案

乱码的核心原因是目标API返回了gzip压缩的响应,而Axios在部分环境(尤其是Node.js)下不会自动处理压缩内容。以下是两种可行的解决方式:

方法一:使用第三方库自动处理压缩

安装axios-gzip库来让Axios自动处理gzip解压:

npm install axios-gzip

配置并发起请求:

import axios from 'axios';
import { gzip } from 'axios-gzip';

// 创建带压缩处理的Axios实例
const axiosClient = axios.create();
gzip(axiosClient);

try {
  const response = await axiosClient.get("https://api.predic8.de/shop/products/", {
    headers: {
      'Accept': 'application/json', // 明确要求JSON格式响应
      'Accept-Encoding': 'gzip, deflate' // 告知服务器可返回压缩内容
    }
  });
  console.log(response.data);
} catch (error) {
  console.error(error);
}

方法二:手动解压响应(Node.js环境)

如果不想引入第三方库,可以通过zlib模块手动处理解压:

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

try {
  const response = await axios.get("https://api.predic8.de/shop/products/", {
    responseType: 'arraybuffer', // 以二进制格式接收响应
    headers: {
      'Accept': 'application/json',
      'Accept-Encoding': 'gzip'
    }
  });

  // 解压并转换为JSON
  const decompressedBuffer = await gunzip(response.data);
  const jsonData = JSON.parse(decompressedBuffer.toString('utf8'));
  console.log(jsonData);
} catch (error) {
  console.error(error);
}

注意事项

不要混淆Content-Type和Accept请求头:

  • Content-Type:用于告知服务器你发送的请求内容类型,此处不需要设置(GET请求无请求体)
  • Accept:用于告知服务器你期望接收的响应内容类型,必须设置为application/json来明确要求JSON格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:03:19