乐闻世界logo
搜索文章和话题

How to decompress Gzip Json response via Axios

1个答案

1

In the process of handling HTTP requests with Axios, if the server returns a Gzip-compressed JSON response body, browsers or Node.js environments typically automatically handle the decompression process because they natively support Content-Encoding: gzip. This means developers usually do not need to manually decompress the response.

However, if automatic decompression does not occur for some reason, you can manually handle the Gzip-compressed response. This typically involves the following steps:

  1. Set responseType: 'arraybuffer' or responseType: 'stream' in the Axios request to ensure the response body is not automatically parsed or transformed.
  2. Use the zlib module (in Node.js environment) or other suitable libraries to decompress the response body.
  3. Parse the decompressed data into JSON.

The following is an example of handling Gzip-compressed JSON response bodies in a Node.js environment:

javascript
const axios = require('axios'); const zlib = require('zlib'); // Send request axios({ method: 'get', url: 'https://example.com/data', // This is a hypothetical URL returning Gzip-compressed JSON responseType: 'arraybuffer', // Ensure response body is returned as ArrayBuffer headers: {'Accept-Encoding': 'gzip'} // Explicitly request Gzip-compressed response }).then(response => { // Verify response headers to confirm Gzip compression if (response.headers['content-encoding'] === 'gzip') { // Decompress data using zlib zlib.gunzip(response.data, (err, decompressed) => { if (!err) { // Convert decompressed data to JSON object const jsonData = JSON.parse(decompressed.toString()); console.log(jsonData); // Process JSON data here } else { console.error('An error occurred while decompressing the response:', err); } }); } else { // If data is not compressed, parse JSON directly const jsonData = JSON.parse(response.data.toString()); console.log(jsonData); // Process JSON data here } }).catch(error => { console.error('An error occurred during the request:', error); });

Note that the above code should be used in a Node.js environment because it relies on the Node.js zlib module. If you are working in a browser environment, you typically do not need to handle decompression manually, as browsers automatically manage Gzip decompression. If manual handling is required in the browser, consider using browser-supported libraries such as pako instead of zlib.

2024年6月29日 12:07 回复

你的答案