tomas / needle

Nimble, streamable HTTP client for Node.js. With proxy, iconv, cookie, deflate & multipart support.
https://www.npmjs.com/package/needle
MIT License
1.63k stars 236 forks source link

`err` event not triggered on endless redirects (node16 specific) #389

Closed julianlam closed 8 months ago

julianlam commented 2 years ago

Hi there,

If a URL is passed in that sends back a redirect to an url that sends back a redirect, repeat ad nauseam... needle doesn't throw an error anymore, at least on Node v16.14.0

The affected URL is http://www.sri-lanka-live.de/Fauna_Flora/Schmetterlinge_1/Falter_2_4.jpg, which is a misconfigured web server that endlessly redirects requests by prepending index.php/ to the path. Warning: This is not my web server, nor do I have control over it – you can likely reproduce this by misconfiguring a proxy server to redirect something from http to https and back again.

Anyhow, on Node 14, it throws (or triggers) this error:

Error: Remote end closed socket abruptly.                                                                                                                                
    at TLSSocket.on_socket_end (/path/to/needle/lib/needle.js:529:17)                                                
    at processTicksAndRejections (internal/process/task_queues.js:77:11)

Now it hangs forever.

I have some sample code that seems to trigger this behaviour:

const needle = require('needle');
const badUrl = 'http://www.sri-lanka-live.de/Fauna_Flora/Schmetterlinge_1/Falter_2_4.jpg';

const stream = needle.get(badUrl, { follow_max: 2 });

stream.on('redirect', (location) => {
  console.log(`redirected to ${location}`);
});

stream.on('err', (e) => {
  console.log(error);
});

stream.on('data', (data) => {
  console.log('received', data);
});

process.stdin.resume();

It seems follow_max is adhered to, but instead of throwing the aforementioned error, nothing happens at all.

xiaoyang678 commented 8 months ago

👀 https://github.com/tomas/needle/issues/413

tomas commented 8 months ago

@xiaoyang678 @julianlam Feel free to submit a PR to address this issue :)

xiaoyang678 commented 8 months ago

@xiaoyang678 @julianlam Feel free to submit a PR to address this issue :)

i think v3.2.0 is fixed this issue, https://github.com/tomas/needle/issues/413 , please close.