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

Axios请求Google搜索接口返回乱码,Postman正常问题求助

解决Axios请求Google返回乱码的问题

问题原因

Google会根据请求头的Accept-Encoding返回gzip/br/deflate压缩后的内容,Postman默认会自动识别并解压这些压缩格式,但Axios默认不具备自动解压能力,因此直接拿到的是原始二进制压缩数据,显示为乱码。另外,请求头中的User-Agent不一致也可能导致返回内容差异。

解决方案

方法1:手动处理压缩内容

通过Node.js的zlib模块手动解压响应数据,步骤如下:

  1. 配置Axios请求头,指定接受压缩格式,并设置responseType: 'arraybuffer'以获取二进制数据
  2. 根据响应头的content-encoding判断压缩类型,调用对应解压方法
  3. 将解压后的二进制数据转为UTF-8字符串

示例代码:

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

// 把zlib的异步方法转为Promise形式
const gunzip = promisify(zlib.gunzip);
const brotliDecompress = promisify(zlib.brotliDecompress);
const inflate = promisify(zlib.inflate);

async function fetchGoogleSearch() {
  const response = await axios.get('https://www.google.com/search?q=test', {
    headers: {
      // 和Postman一致的请求头,重点是Accept-Encoding和User-Agent
      'Accept-Encoding': 'gzip, deflate, br',
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    },
    responseType: 'arraybuffer' // 必须指定,否则会把二进制数据当成字符串解析导致乱码
  });

  let decodedData;
  // 根据响应头判断压缩类型并解压
  switch (response.headers['content-encoding']) {
    case 'gzip':
      decodedData = await gunzip(response.data);
      break;
    case 'br':
      decodedData = await brotliDecompress(response.data);
      break;
    case 'deflate':
      decodedData = await inflate(response.data);
      break;
    default:
      decodedData = response.data;
  }

  // 转为UTF-8字符串
  console.log(decodedData.toString('utf8'));
}

fetchGoogleSearch();

方法2:配置Axios自动处理压缩

通过Axios的transformResponse配置全局处理响应,实现自动解压:

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

const gunzip = promisify(zlib.gunzip);
const brotliDecompress = promisify(zlib.brotliDecompress);
const inflate = promisify(zlib.inflate);

// 创建配置好的Axios实例
const axiosInstance = axios.create({
  headers: {
    'Accept-Encoding': 'gzip, deflate, br',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
  },
  transformResponse: [async (data, headers) => {
    if (!data) return data;
    // 自动判断压缩类型并解压
    switch (headers['content-encoding']) {
      case 'gzip':
        return (await gunzip(data)).toString('utf8');
      case 'br':
        return (await brotliDecompress(data)).toString('utf8');
      case 'deflate':
        return (await inflate(data)).toString('utf8');
      default:
        return data.toString('utf8');
    }
  }]
});

async function fetchGoogle() {
  const res = await axiosInstance.get('https://www.google.com/search?q=test');
  console.log(res.data); // 直接拿到解码后的HTML内容
}

fetchGoogle();

关键注意点

  • 必须确保Axios的请求头和Postman完全一致,尤其是User-Agent和Accept-Encoding,Google会根据UA返回不同内容,甚至拦截非浏览器UA请求
  • 不要遗漏responseType: 'arraybuffer',否则Axios会默认把二进制压缩数据当成UTF-8字符串解析,直接导致乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:20:48