controlol
controlol

Reputation: 88

axios does not return the full data

axios.get(downloadUrl, Object.assign({}, this.tokens[token_nr].config, {responseType: stream}))
.then((response) => {
    console.log("HEADERS", response.headers)

    console.log(typeof response.data, "RESPONSE LENGTH", response.data.length)

    const decryptedBuffer = encryptionService.decrypt(Buffer.from(response.data), infos);

    resolve(decryptedBuffer);
})

This axios request should give the data of a mp3 file. I previously had it via the request package which gives a binary Buffer (using the encoding: null option) and I can use it in the encryptionService.decrypt() function.

In the response.headers I can see it gives the same content-length as it would with the request package. But when I print the length of response.data it's shorter. I tried both ArrayBuffer and stream as my ResponseType. Also leaving the ResponseType option out does not help. What should I do to get the full content.

Some logs: (not all headers)

HEADERS {
  'accept-ranges': 'bytes',
  'cache-control': 'public',
  'content-type': 'audio/mpeg',
  'content-length': '14175084',
  connection: 'close'
}
string RESPONSE LENGTH 13495410
CONFIG HEADERS {
  headers: {
    Accept: 'application/json, text/plain, */*',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36',
    'cache-control': 'max-age=0',
    'accept-language': 'en-US,en;q=0.9,en-US;q=0.8,en;q=0.7',
    'accept-charset': 'utf-8,ISO-8859-1;q=0.8,*;q=0.7',
    cookie: 'arl=XXXX',
    Connection: 'keep-alive',
    'Keep-Alive': 'timeout=1500, max=100',
    'Content-Type': 'text/plain;charset=UTF-8'
  },
}

Upvotes: 0

Views: 2044

Answers (2)

controlol
controlol

Reputation: 88

It was resolved with this answer: https://disjoint.ca/til/2017/09/20/how-to-download-a-binary-file-using-axios/

I missed the Content-Type header and the {ResponseType: 'arraybuffer'}

Upvotes: 1

e03050
e03050

Reputation: 1582

When creating request try passing following headers Connection, Keep-Alive. Sometimes it close the connection before fully receiving the response

   var axioRequest = await axios.create({
        baseURL: url,
        headers: {
            Connection: 'keep-alive',
            'Keep-Alive': 'timeout=1500, max=100'
        }
    });

Upvotes: 2

Related Questions