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

Node.js调用Microsoft Graph API返回乱码,如何获取JSON响应?

解决Node.js中axios调用Microsoft Graph API返回乱码的问题
  • 核心原因:Graph API默认返回gzip压缩的响应内容,Insomnia等工具会自动解压,但Node.js环境下的axios默认未开启自动解压功能,导致你拿到的是原始压缩二进制数据,显示为乱码。

  • 快速修复方案:
    在axios请求中添加两个关键配置:

    1. 设置Accept-Encoding头告知服务端你接受压缩格式
    2. 开启decompress: true让axios自动解压响应(axios 0.21.0及以上版本支持)

    示例代码:

    const axios = require('axios');
    
    async function getUsers(accessToken) {
      try {
        const response = await axios.get('https://graph.microsoft.com/v1.0/users', {
          headers: {
            'Authorization': `Bearer ${accessToken}`,
            'Accept-Encoding': 'gzip, deflate' // 明确接受压缩格式
          },
          decompress: true // 开启自动解压
        });
        console.log(response.data); // 此时应该能正常拿到JSON数据
      } catch (error) {
        console.error(error);
      }
    }
    
  • 低版本axios兼容方案(低于0.21.0):
    手动用Node.js的zlib模块解压响应:

    const axios = require('axios');
    const zlib = require('zlib');
    const { promisify } = require('util');
    const gunzip = promisify(zlib.gunzip);
    
    async function getUsers(accessToken) {
      try {
        const response = await axios.get('https://graph.microsoft.com/v1.0/users', {
          headers: {
            'Authorization': `Bearer ${accessToken}`,
            'Accept-Encoding': 'gzip'
          },
          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);
        }
      } catch (error) {
        console.error(error);
      }
    }
    
  • 额外排查点:检查是否误设置了responseType为arraybuffer或blob,如果是,改回默认的json(或按上述手动解压方式处理)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:31:19