https://github.com/fent/node-miniget
A small http(s) GET library.
https://github.com/fent/node-miniget
http-client node
Last synced: about 1 year ago
JSON representation
A small http(s) GET library.
- Host: GitHub
- URL: https://github.com/fent/node-miniget
- Owner: fent
- License: mit
- Created: 2017-04-20T13:13:05.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2023-06-23T10:12:42.000Z (almost 3 years ago)
- Last Synced: 2025-04-02T04:17:38.682Z (about 1 year ago)
- Topics: http-client, node
- Language: TypeScript
- Size: 685 KB
- Stars: 57
- Watchers: 4
- Forks: 17
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# node-miniget
A small http(s) GET library with redirects, retries, reconnects, concatenating or streaming, and no dependencies. This keeps filesize small for potential browser use.

[](https://codecov.io/gh/fent/node-miniget)
# Usage
Concatenates a response
```js
const miniget = require('miniget');
miniget('http://mywebsite.com', (err, res, body) => {
console.log('webpage contents: ', body);
});
// with await
let body = await miniget('http://yourwebsite.com').text();
```
Request can be streamed right away
```js
miniget('http://api.mywebsite.com/v1/messages.json')
.pipe(someWritableStream());
```
# API
### miniget(url, [options])
Makes a GET request. `url` can be a string or a `URL` object. `options` can have any properties from the [`http.request()` function](https://nodejs.org/api/http.html#http_http_request_options_callback), in addition to
* `maxRedirects` - Default is `10`.
* `maxRetries` - Number of times to retry the request if there is a 500 or connection error. Default is `2`.
* `maxReconnects` - During a big download, if there is a disconnect, miniget can try to reconnect and continue the download where it left off. Default is `0`.
* `backoff` - An object with `inc` and `max` used to calculate how long to wait to retry a request. Default is `{ inc: 100, max: 10000 }`.
* `highWaterMark` - Amount of data to buffer when in stream mode.
* `transform` - Use this to add additional features. Called with the object that `http.get()` or `https.get()` would be called with. Must return a transformed object.
* `acceptEncoding` - An object with encoding name as the key, and the value as a function that returns a decoding stream.
```js
acceptEncoding: { gzip: () => require('zlip').createGunzip(stream) }
```
Given encodings will be added to the `Accept-Encoding` header, and the response will be decoded if the server responds with encoded content.
Defaults are held in `miniget.defaultOptions` and can be adjusted globally.
Miniget returns a readable stream, errors will then be emitted on the stream. Returned stream has additional methods added, and can emit the following events.
### Stream#destroy([error])
Destroys the request.
### Stream#destroyed
Set to `true` after `Stream#destroy()` has been called.
### Stream#text()
Returns a promise that resolves to the concatenated contents of the response.
```js
let body = await miniget('http://yourwebsite.com').text();
```
#### Event: redirect
* `string` - URL redirected to.
Emitted when the request was redirected with a redirection status code.
#### Event: retry
* `number` - Number of retry.
* `Error` - Request or status code error.
Emitted when the request fails, or the response has a status code >= 500.
#### Event: reconnect
* `number` - Number of reconnect.
* `Error` - Request or response error.
Emitted when the request or response fails after download has started.
#### Event: request
* [`http.ClientRequest`](https://nodejs.org/api/http.html#http_class_http_clientrequest) - Request.
Emitted when a video request is made, including after any redirects, retries, and reconnects.
#### Event: response
* [`http.ServerResponse`](https://nodejs.org/api/http.html#http_class_http_serverresponse) - Response.
Emitted when a video response has been found and has started downloading, including after any successful reconnects.
#### Forwarded events
Any events emitted from the [request](https://nodejs.org/api/http.html#http_class_http_clientrequest) or [response](https://nodejs.org/api/http.html#http_class_http_serverresponse) objects will be forwarded to the miniget stream.
# Install
npm install miniget
# Tests
Tests are written with [mocha](https://mochajs.org)
```bash
npm test
```