A module conforming to this specification is:
module.exports = (options) => {
// do something with options
// and make the actual HTTP request
}
Given the above module definition, a client application can use it like this:
var request = require('my-http-client')
// make request
request({
// any common option defined in this specification
})
var http = require('http')
module.exports = (options) => {
// do something with the common interface options
var resultOptions = {}
// implement various HTTP features
return http.request(resultOptions)
}
var request = require('request')
module.exports = (options) => {
// do something with the common interface options
var resultOptions = {}
// implement various HTTP features
return request(resultOptions)
}
// use the native fetch API in the browser
module.exports = (options) => {
// do something with the common interface options
var resultOptions = {}
// implement various HTTP features
return fetch(new Request(url, resultOptions))
}
Either way the client application should be able to make requests in a consistent way:
var request = require('my-http-client')
// make request
request({
// any common option defined in this specification
})
A module conforming to this specification while having optional dependencies may look like this:
module.exports = (deps) => (options) => {
var resultOptions = {}
if (options.oauth) {
resultOptions.oauth = deps.oauth(options.oauth)
}
return request(resultOptions)
}
Given the above module definition, a client application can use it like this:
var request = require('my-http-client')({
oauth: require('my-oauth-implementation')
})
// make request
request({
// any common option defined in this specification
})
A module conforming to this specification while having hardcoded dependencies may look like this:
module.exports = require('my-http-client')({
oauth: require('my-oauth-implementation')
})
Given the above module definition, a client application can use it like this:
var request = require('my-http-client')
// make request
request({
// any common option defined in this specification
})
A module using the common @request/api may look like this:
var request = require('my-http-client')
var api = require('@request/api')
module.exports = api({
type: 'basic',
request: request
})
Given the above module definition, a client application can use it like this:
var request = require('my-http-client')
// make request
request('url', {options}, (err, res, body) => {})
// or
request.[HTTP_VERB]('url', {options}, (err, res, bdoy) => {})
// + any combination of the above arguments
A module using the common @request/api may look like this:
var request = require('my-http-client')
var api = require('@request/api')
module.exports = api({
type: 'chain',
define: {
request: request
}
})
Given the above module definition, a client application can use it like this:
var request = require('my-http-client')
// make request
request
.get('url')
.qs({a: 1})
.callback((err, res, body) => {})
.request()
A module utilizing Promises may look like this:
module.exports = (deps) => (options) => {
var request = deps.request
var Promise = deps.promise
var promise = new Promise((resolve, reject) => {
options.callback = (err, res, body) => {
;(err) ? reject(err) : resolve([res, body])
}
})
request(options)
return promise
}
Given the above module definition, a client application can use it like this:
var request = require('my-http-client')({
request: require('request'),
promise: Promise
})
// or
var request = require('my-http-client')({
request: require('request'),
promise: require('bluebird')
})
// make request
request({options})
.catch((err) => {})
.then((result) => {})
A module utilizing the common @request/api and Promises may look like this:
var api = require('@request/api')
module.exports = (deps) => api({
type: 'basic', // or 'chain'
define: {
request: (options) => {
var request = deps.request
var Promise = deps.promise
var promise = new Promise((resolve, reject) => {
options.callback = (err, res, body) => {
;(err) ? reject(err) : resolve([res, body])
}
})
request(options)
return promise
}
}
})
Given the above module definition, a client application can use it like this:
var request = require('my-http-client')({
request: require('request'),
promise: Promise
})
// GET http://localhost:6767?a=1
request.get('http://localhost:6767', {qs: 1})
.catch((err) => {})
.then((result) => {})
// or
request
.get('http://localhost:6767')
.qs({a: 1})
.request()
.catch((err) => ())
.then((result) => ())
| option | type |
|---|---|
| method | String |
| URL | |
| url/uri | String, Object |
| qs | Object, String |
| Body | |
| form | Object, String |
| json | Object, String |
| body | Stream, Buffer, Array, String |
| multipart | Object, Array |
| Authentication | |
| auth | Object |
| basic, oauth, hawk, httpSignature, aws | |
| Modifiers | |
| gzip | Boolean, String |
| encoding | Boolean, String |
| stringify | Object |
| parse | Object |
| Proxy | |
| proxy | String, Object |
| tunnel | Boolean |
| Misc | |
| headers | Object |
| cookie | Boolean, Object |
| length | Boolean |
| callback | Function |
| redirect | Boolean, Object |
| timeout | Number |
| har | Object |
| end | Boolean |
StringString | ObjectStringurl.UrlObject | StringObjectStringObject | StringObjectString pass URL encoded string if you want it to be RFC3986 encoded prior sendingObject | StringObjectStringString | Buffer | Array | StreamStreamBufferStringArrayObject | ArrayObject for multipart/form-dataArray for any other multipart/[TYPE], defaults to multipart/relatedEach item’s body can be either: Stream, Request, Buffer or String.
_multipart
data - the abovepreambleCRLF and/or postambleCRLF to true.Objectbasic
{user: '', pass: '', sendImmediately: false, digest: true}
Authorization: Basic ... header.sendImmediately option default to true if omitted.sendImmediately: false options requires the redirect option to be enabled.bearer
{token: '', sendImmediately: false}
Authorization: Bearer ... header can be set if using the bearer option.sendImmediately option from above applies here.oauth
hawk
httpSignature
aws
Boolean | Stringtrue
content-encoding response header.'gzip' | 'deflate'
Boolean | Stringtrue
utf8.'ISO-8859-1' | 'win1251' | …
'binary'
encoding to 'binary' when expecting binary response.Object{json: true}
accept: application/json header for the requestJSON or JSONP response bodies (only if the server responds with the approprite headers){json: function () {}}
JSON.parse method{qs: {sep:';', eq:':'}}
{querystring: {sep:';', eq:':', options: {}}} use the querystring module instead
Object{qs: {sep:';', eq:':'}}
{querystring: {sep:';', eq:':', options: {}}} use the querystring module instead
String | Object{
proxy: 'http://localhost:6767'
//
proxy: url.parse('http://localhost:6767')
//
proxy: {
url: 'http://localhost:6767',
headers: {
allow: ['header-name'],
exclusive: ['header-name']
}
}
}
BooleantrueObjectBoolean | Objecttruenew require('tough-cookie).CookieJar(store, options)Booleantrue defaults to false if omittedFunctionfunction (err, res, body) {} buffers the response body
utf8.encoding property to binary if you expect binary data, or any other specific encoding.Boolean | Objecttrue
GET, HEAD, OPTIONS and TRACE requestsObject
referer header on redirectfunction (res) user defined function to check if the redirect should be allowedNumberObjectBooleantrue
nextTick