source: imaps-frontend/node_modules/follow-redirects/README.md

main
Last change on this file was d565449, checked in by stefan toskovski <stefantoska84@…>, 4 weeks ago

Update repo after prototype presentation

  • Property mode set to 100644
File size: 6.3 KB
Line 
1## Follow Redirects
2
3Drop-in replacement for Node's `http` and `https` modules that automatically follows redirects.
4
5[![npm version](https://img.shields.io/npm/v/follow-redirects.svg)](https://www.npmjs.com/package/follow-redirects)
6[![Build Status](https://github.com/follow-redirects/follow-redirects/workflows/CI/badge.svg)](https://github.com/follow-redirects/follow-redirects/actions)
7[![Coverage Status](https://coveralls.io/repos/follow-redirects/follow-redirects/badge.svg?branch=master)](https://coveralls.io/r/follow-redirects/follow-redirects?branch=master)
8[![npm downloads](https://img.shields.io/npm/dm/follow-redirects.svg)](https://www.npmjs.com/package/follow-redirects)
9[![Sponsor on GitHub](https://img.shields.io/static/v1?label=Sponsor&message=%F0%9F%92%96&logo=GitHub)](https://github.com/sponsors/RubenVerborgh)
10
11`follow-redirects` provides [request](https://nodejs.org/api/http.html#http_http_request_options_callback) and [get](https://nodejs.org/api/http.html#http_http_get_options_callback)
12 methods that behave identically to those found on the native [http](https://nodejs.org/api/http.html#http_http_request_options_callback) and [https](https://nodejs.org/api/https.html#https_https_request_options_callback)
13 modules, with the exception that they will seamlessly follow redirects.
14
15```javascript
16const { http, https } = require('follow-redirects');
17
18http.get('http://bit.ly/900913', response => {
19 response.on('data', chunk => {
20 console.log(chunk);
21 });
22}).on('error', err => {
23 console.error(err);
24});
25```
26
27You can inspect the final redirected URL through the `responseUrl` property on the `response`.
28If no redirection happened, `responseUrl` is the original request URL.
29
30```javascript
31const request = https.request({
32 host: 'bitly.com',
33 path: '/UHfDGO',
34}, response => {
35 console.log(response.responseUrl);
36 // 'http://duckduckgo.com/robots.txt'
37});
38request.end();
39```
40
41## Options
42### Global options
43Global options are set directly on the `follow-redirects` module:
44
45```javascript
46const followRedirects = require('follow-redirects');
47followRedirects.maxRedirects = 10;
48followRedirects.maxBodyLength = 20 * 1024 * 1024; // 20 MB
49```
50
51The following global options are supported:
52
53- `maxRedirects` (default: `21`) – sets the maximum number of allowed redirects; if exceeded, an error will be emitted.
54
55- `maxBodyLength` (default: 10MB) – sets the maximum size of the request body; if exceeded, an error will be emitted.
56
57### Per-request options
58Per-request options are set by passing an `options` object:
59
60```javascript
61const url = require('url');
62const { http, https } = require('follow-redirects');
63
64const options = url.parse('http://bit.ly/900913');
65options.maxRedirects = 10;
66options.beforeRedirect = (options, response, request) => {
67 // Use this to adjust the request options upon redirecting,
68 // to inspect the latest response headers,
69 // or to cancel the request by throwing an error
70
71 // response.headers = the redirect response headers
72 // response.statusCode = the redirect response code (eg. 301, 307, etc.)
73
74 // request.url = the requested URL that resulted in a redirect
75 // request.headers = the headers in the request that resulted in a redirect
76 // request.method = the method of the request that resulted in a redirect
77 if (options.hostname === "example.com") {
78 options.auth = "user:password";
79 }
80};
81http.request(options);
82```
83
84In addition to the [standard HTTP](https://nodejs.org/api/http.html#http_http_request_options_callback) and [HTTPS options](https://nodejs.org/api/https.html#https_https_request_options_callback),
85the following per-request options are supported:
86- `followRedirects` (default: `true`) – whether redirects should be followed.
87
88- `maxRedirects` (default: `21`) – sets the maximum number of allowed redirects; if exceeded, an error will be emitted.
89
90- `maxBodyLength` (default: 10MB) – sets the maximum size of the request body; if exceeded, an error will be emitted.
91
92- `beforeRedirect` (default: `undefined`) – optionally change the request `options` on redirects, or abort the request by throwing an error.
93
94- `agents` (default: `undefined`) – sets the `agent` option per protocol, since HTTP and HTTPS use different agents. Example value: `{ http: new http.Agent(), https: new https.Agent() }`
95
96- `trackRedirects` (default: `false`) – whether to store the redirected response details into the `redirects` array on the response object.
97
98
99### Advanced usage
100By default, `follow-redirects` will use the Node.js default implementations
101of [`http`](https://nodejs.org/api/http.html)
102and [`https`](https://nodejs.org/api/https.html).
103To enable features such as caching and/or intermediate request tracking,
104you might instead want to wrap `follow-redirects` around custom protocol implementations:
105
106```javascript
107const { http, https } = require('follow-redirects').wrap({
108 http: require('your-custom-http'),
109 https: require('your-custom-https'),
110});
111```
112
113Such custom protocols only need an implementation of the `request` method.
114
115## Browser Usage
116
117Due to the way the browser works,
118the `http` and `https` browser equivalents perform redirects by default.
119
120By requiring `follow-redirects` this way:
121```javascript
122const http = require('follow-redirects/http');
123const https = require('follow-redirects/https');
124```
125you can easily tell webpack and friends to replace
126`follow-redirect` by the built-in versions:
127
128```json
129{
130 "follow-redirects/http" : "http",
131 "follow-redirects/https" : "https"
132}
133```
134
135## Contributing
136
137Pull Requests are always welcome. Please [file an issue](https://github.com/follow-redirects/follow-redirects/issues)
138 detailing your proposal before you invest your valuable time. Additional features and bug fixes should be accompanied
139 by tests. You can run the test suite locally with a simple `npm test` command.
140
141## Debug Logging
142
143`follow-redirects` uses the excellent [debug](https://www.npmjs.com/package/debug) for logging. To turn on logging
144 set the environment variable `DEBUG=follow-redirects` for debug output from just this module. When running the test
145 suite it is sometimes advantageous to set `DEBUG=*` to see output from the express server as well.
146
147## Authors
148
149- [Ruben Verborgh](https://ruben.verborgh.org/)
150- [Olivier Lalonde](mailto:olalonde@gmail.com)
151- [James Talmage](mailto:james@talmage.io)
152
153## License
154
155[MIT License](https://github.com/follow-redirects/follow-redirects/blob/master/LICENSE)
Note: See TracBrowser for help on using the repository browser.