Drop-in replacement for Nodes http and https that automatically follows redirects, it can also follow http2 redirects.
node-follow-redirects provides mimic the native http and https modules, with the exception these will seamlessly follow redirects in http1.1 / https1.1 / http2 . It will automatically use https1.1 / http2 when needed according to server protocol. To be http2 compatible it uses http2-client. To follow redirects it uses follow-redirects - expect the API to be identical just with http2 support.
const {http , https , http2} = require('node-follow-redirects');
//You can follow http1.1 redirect
http.get('http://bit.ly/900913', (response) =>{
response.on('data', console.log );
})
.on('error', console.error );
//You can follow http2 / https1.1 redirect
http2.get('http://bit.ly/900913', (response) =>{
response.on('data', console.log );
})
.on('error', console.error );
You can inspect the final redirected URL through the responseUrl
property on the response
.
If no redirection happened, responseUrl
is the original request URL.
http2.request({
host: 'bitly.com',
path: '/UHfDGO',
}, function (response) {
console.log(response.responseUrl);
// 'http://duckduckgo.com/robots.txt'
});
Global options are set directly on the node-follow-redirects
module:
const nodeFollowRedirects = require('node-follow-redirects');
nodeFollowRedirects.maxRedirects = 10;
nodeFollowRedirects.maxBodyLength = 20 * 1024 * 1024; // 20 MB
The following global options are supported:
-
maxRedirects
(default:21
) – sets the maximum number of allowed redirects; if exceeded, an error will be emitted. -
maxBodyLength
(default: 10MB) – sets the maximum size of the request body; if exceeded, an error will be emitted.
Per-request options are set by passing an options
object:
const url = require('url');
const {http2} = require('node-follow-redirects');
const options = url.parse('https://bit.ly/900913');
options.maxRedirects = 10;
http2.request(options);
In addition to the standard HTTP and HTTPS options, the following per-request options are supported:
-
followRedirects
(default:true
) – whether redirects should be followed. -
maxRedirects
(default:21
) – sets the maximum number of allowed redirects; if exceeded, an error will be emitted. -
maxBodyLength
(default: 10MB) – sets the maximum size of the request body; if exceeded, an error will be emitted. -
agents
(default:undefined
) – sets theagent
option per protocol, since HTTP and HTTPS use different agents. Example value:{ http: new http.Agent(), https: new https.Agent() }
-
trackRedirects
(default:false
) – whether to store the redirected response details into theredirects
array on the response object.
By default, node-follow-redirects
will use the Node.js default implementations
of http
and https
or http2-client
.
To enable features such as caching and/or intermediate request tracking,
you might instead want to wrap node-follow-redirects
around custom protocol implementations:
var followRedirects = require('node-follow-redirects').wrap({
http: require('your-custom-http'),
https: require('your-custom-https'),
});
Such custom protocols only need an implementation of the request
method.
Transparently supports all http protocol.
- Http/1.1
- Https/1.1
- Http/2.0
In case of http1.1 the connection pool is managed as usual with an http agent. In case of http2 all requests use a signle connection (per domain/port ).
//The following will create a single http2 connection to the server
http2.get('https://www.google.com', (response) =>{
response.on('data', console.log );
})
.on('error', console.error );
http2.get('https://www.google.com', (response) =>{
response.on('data', console.log );
})
.on('error', console.error );
http2.get('https://www.google.com', (response) =>{
response.on('data', console.log );
})
.on('error', console.error );