Node.js中Axios GET请求返回特殊字符问题求助
解决Node.js中Axios请求返回特殊字符的问题
问题原因
Node.js环境下,Axios默认不会自动处理gzip/deflate压缩的响应(浏览器环境会自动完成解压),而JSONPlaceholder的接口会返回gzip压缩的数据,直接打印未解压的Buffer就会显示为特殊字符。Postman会自动处理压缩响应,因此能正常返回数据。
解决方案
方法1:配置Axios自动解压
修改请求配置,明确启用解压并设置Accept-Encoding头:
const axios = require("axios"); async function getData() { const resp = await axios.get( "https://jsonplaceholder.typicode.com/users", { headers: { 'Accept-Encoding': 'gzip, deflate' }, decompress: true // 明确启用自动解压 } ); console.log(resp.data); } getData();
方法2:手动解压响应数据
如果自动解压不生效,可通过Node.js自带的zlib模块手动解码:
const axios = require("axios"); const zlib = require("zlib"); const { promisify } = require("util"); const gunzip = promisify(zlib.gunzip); async function getData() { const resp = await axios.get( "https://jsonplaceholder.typicode.com/users", { responseType: 'arraybuffer', // 指定响应类型为二进制数据 headers: { 'Accept-Encoding': 'gzip' } } ); // 解压并转换为JSON const decompressedBuffer = await gunzip(resp.data); const userData = JSON.parse(decompressedBuffer.toString()); console.log(userData); } getData();
方法3:升级Axios版本
部分旧版本Axios在Node环境的解压逻辑存在问题,可尝试升级到最新稳定版:
npm install axios@latest
内容的提问来源于stack exchange,提问作者nr_codes
相关产品推荐
相关产品推荐

