【问题标题】:Decompress GZIP string response from a PHP server in NodeJS从 NodeJS 中的 PHP 服务器解压缩 GZIP 字符串响应
【发布时间】:2023-03-16 23:46:02
【问题描述】:

我有一个现有的 PHP 代码正在向第 3 方 PHP 服务器发出 curl 请求。

第 3 方服务器返回 GZIP 字符串。

在 PHP 中,我可以使用gzdecode 来解码 gzip 字符串。

如何在 NodeJS/Javascript 中做到这一点?我尝试使用decompress-response 无济于事。

也试过用got代替request,启用了自动解压,还是不行。

编辑:也试过zlibpako,也没有用。

示例代码 [PHP]

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => $params,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 3000000,
    CURLOPT_ENCODING  => '',
    CURLOPT_CUSTOMREQUEST => "GET",
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);
if ($err) {
   echo false;
} else {
   $response = gzdecode($response);
   echo $response;
}

【问题讨论】:

    标签: javascript node.js gzip


    【解决方案1】:

    这是适合我的解决方案。

    我使用 got 而不是 axios 因为我无法让它在那里工作。

    我设置了我的请求选项:

    const requestOptions = {
        encoding: null, // this is important
        headers: {
            "Accept-Encoding": "gzip",
        }
        ...
    };
    

    不要忘记encoding: null 行,因为没有它,响应将自动转换为字符串。 (我们需要一个缓冲区来完成这项工作)

    然后我创建了一个这样的函数来处理我的请求:

    const zlib = require("zlib");
    
    async function performRequest(url, options) {
        try {
            const response = await got(url, options);
            if (response.headers["content-encoding"] === "gzip") {
                const body = response.body;
                try {
                    const dezziped = zlib.gunzipSync(response.body);
                    response.body = JSON.parse(dezziped.toString());
                } catch (error) {
                    response.body = body;
                }
            }
            return response.body;
        } catch (error) {
            return error;
        }
    }
    

    注意:这是一个同步操作,如果你想做异步方式,可以使用gunzip代替。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2012-08-22
      • 2011-04-07
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多