Ответ 1
Возможно, ваша проблема находится в заголовке 'Accept-Encoding'
.
Скажем, у вас есть заголовки вроде 'Accept-Encoding': 'gzip,deflate'
Если это так, у вас есть 2 способа исправить это:
- Удалить этот заголовок
-
Используйте следующий код для распаковки данных:
const req = request(options, res => { let buffers = [] let bufferLength = 0 let strings = [] const getData = chunk => { if (!Buffer.isBuffer(chunk)) { strings.push(chunk) } else if (chunk.length) { bufferLength += chunk.length buffers.push(chunk) } } const endData = () => { let response = {code: 200, body: ''} if (bufferLength) { response.body = Buffer.concat(buffers, bufferLength) if (options.encoding !== null) { response.body = response.body.toString(options.encoding) } buffers = [] bufferLength = 0 } else if (strings.length) { if (options.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') { strings[0] = strings[0].substring(1) } response.body = strings.join('') } console.log('response', response) }; switch (res.headers['content-encoding']) { // or, just use zlib.createUnzip() to handle both cases case 'gzip': res.pipe(zlib.createGunzip()) .on('data', getData) .on('end', endData) break; case 'deflate': res.pipe(zlib.createInflate()) .on('data', getData) .on('end', endData) break; default: res.pipe(zlib.createInflate()) .on('data', getData) .on('end', endData) break; } });