You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

200 lines
5.1 KiB

<h1 align="center">
<br>
<img width="360" src="https://rawgit.com/sindresorhus/got/master/media/logo.svg" alt="got">
<br>
<br>
<br>
</h1>
11 years ago
> Simplified HTTP/HTTPS requests
11 years ago
[![Build Status](https://travis-ci.org/sindresorhus/got.svg?branch=master)](https://travis-ci.org/sindresorhus/got)
A nicer interface to the built-in [`http`](http://nodejs.org/api/http.html) module.
10 years ago
It supports following redirects, streams, automagically handling gzip/deflate and some convenience options.
10 years ago
Created because [`request`](https://github.com/mikeal/request) is bloated *(several megabytes!)* and slow.
11 years ago
## Install
10 years ago
```
11 years ago
$ npm install --save got
```
## Usage
```js
var got = require('got');
10 years ago
// Callback mode
got('todomvc.com', function (err, data, res) {
11 years ago
console.log(data);
//=> <!doctype html> ...
});
10 years ago
// Stream mode
got('todomvc.com').pipe(fs.createWriteStream('index.html'));
10 years ago
// For POST, PUT and PATCH methods got returns a WritableStream
fs.createReadStream('index.html').pipe(got.post('todomvc.com'));
```
11 years ago
### API
It's a `GET` request by default, but can be changed in `options`.
#### got(url, [options], [callback])
##### url
*Required*
Type: `string`, `Object`
The URL to request or bare [http.request options](https://nodejs.org/api/http.html#http_http_request_options_callback) object.
##### options
Type: `object`
Any of the [`http.request`](http://nodejs.org/api/http.html#http_http_request_options_callback) options.
10 years ago
###### body
Type: `string`, `Buffer`, `ReadableStream`
_This option and stream mode are mutually exclusive._
Body, that will be sent with `POST` request. If present in `options` and `options.method` is not set - `options.method` will be set to `POST`.
###### encoding
Type: `string`, `null`
Default: `'utf8'`
Encoding to be used on `setEncoding` of the response data. If null, the body is returned as a Buffer.
10 years ago
###### json
10 years ago
Type: `Boolean`
Default: `false`
_This option and stream mode are mutually exclusive._
If enabled, response body will be parsed with `JSON.parse` and `accept` header will be set to `application/json` by default.
10 years ago
10 years ago
###### query
10 years ago
Type: `string`, `Object`
Query string object, that will be added to request url. This will override query string in `url`.
10 years ago
###### timeout
10 years ago
Type: `number`
10 years ago
Milliseconds after which the request will be aborted and an error event with `ETIMEDOUT` code will be emitted.
10 years ago
###### agent
[http.Agent](http://nodejs.org/api/http.html#http_class_http_agent) instance.
If `undefined` - [`infinity-agent`](https://github.com/floatdrop/infinity-agent) will be used to backport Agent class from Node core.
To use default [globalAgent](http://nodejs.org/api/http.html#http_http_globalagent) just pass `null` to this option.
10 years ago
##### callback(err, data, response)
###### err
10 years ago
`Error` object with HTTP status code as `code` property.
10 years ago
###### data
The data you requested.
###### response
The [response object](http://nodejs.org/api/http.html#http_http_incomingmessage).
When in stream mode, you can listen for events:
##### .on('response', response)
`response` event to get the response object.
10 years ago
##### .on('redirect', response, nextOptions)
10 years ago
`redirect` event to get the response object of redirect. Second argument is options for next request to the redirect location.
##### .on('error', error, body, response)
`error` event emitted in case of protocol error (like ENOTFOUND etc.) or status error (4xx or 5xx). Second argument is body of server response in case of status error. Third argument is response object.
###### response
The [response object](http://nodejs.org/api/http.html#http_http_incomingmessage).
#### got.get(url, [options], [callback])
#### got.post(url, [options], [callback])
#### got.put(url, [options], [callback])
#### got.patch(url, [options], [callback])
#### got.head(url, [options], [callback])
#### got.delete(url, [options], [callback])
Sets `options.method` to the method name and makes a request.
10 years ago
## Proxy
You can use the [`tunnel`](https://github.com/koichik/node-tunnel) module with the `agent` option to work with proxies:
```js
var got = require('got');
var tunnel = require('tunnel');
got('todomvc.com', {
10 years ago
agent: tunnel.httpOverHttp({
proxy: {
host: 'localhost'
}
})
}, function () {});
```
## Tip
It's a good idea to set the `'user-agent'` header so the provider can more easily see how their resource is used. By default it's the URL to this repo.
```js
var got = require('got');
got('todomvc.com', {
headers: {
'user-agent': 'https://github.com/your-username/repo-name'
}
}, function () {});
```
## Related
10 years ago
* [`gh-got`](https://github.com/sindresorhus/gh-got) - Convenience wrapper for interacting with the GitHub API
* [`got-promise`](https://github.com/floatdrop/got-promise) - Promise wrapper
10 years ago
## Created by
[![Sindre Sorhus](https://avatars.githubusercontent.com/u/170270?v=3&s=100)](http://sindresorhus.com) | [![Vsevolod Strukchinsky](https://avatars.githubusercontent.com/u/365089?v=3&s=100)](https://github.com/floatdrop)
---|---
[Sindre Sorhus](http://sindresorhus.com) | [Vsevolod Strukchinsky](https://github.com/floatdrop)
11 years ago
## License
MIT © [Sindre Sorhus](http://sindresorhus.com)