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

Node.js https.get调用Stack Exchange API乱码 如何强制明文编码

核心原因

Stack Exchange API 会强制对所有响应启用gzip压缩,会忽略请求头中Accept-Encoding: identity的配置,你当前代码拿到的是未解压的gzip二进制流,直接按UTF-8编码转字符串就会出现乱码。

解决方案

需要引入Node.js内置的zlib模块对响应流做gzip解压,修改后的代码如下:

import { get, RequestOptions } from 'https';
import { createGunzip } from 'zlib';

const getRequest = (url: string) => new Promise((resolve, reject) => {
    const options: RequestOptions = {
        headers: {
            'Accept': 'application/json',
        }
    }

    const req = get(url, options, (res) => {
        // 判断响应是否为gzip压缩
        const stream = res.headers['content-encoding']?.includes('gzip') 
            ? res.pipe(createGunzip()) 
            : res;

        stream.setEncoding('utf8');
        let responseBody = '';
        stream.on('data', (chunk) => responseBody += chunk);
        stream.on('end', () => resolve(responseBody));
        stream.on('error', (err) => reject(err));
    });

    req.on('error', (err) => reject(err));
    req.end();
})

原有调用逻辑不需要修改,执行后即可拿到正常的JSON明文响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:54:04