HTTP Duplex Streams2 client. By default it behaves identically to Node's Core http.request method.
Each additional feature must be enabled explicitly via option. Some options requires additional dependencies.
String
url.Url
Object
String
Object
String
pass URL encoded string if you want it to be RFC3986 encoded prior sending
Object
Stream
Buffer
String
Array
multipart - requires @request/multipart
Pass Object
for multipart/form-data
body:
// set item
multipart: {photo: fs.createReadStream('cat.png')}
// pass additional info about the uploaded item
multipart: {
photo: {
value: fs.createReadStream('cat.png'),
options: {filename: 'cat.png', contentType: 'image/png', knownLength: 22025}
}
}
// pass array of values for this item
multipart: {attachments: [fs.createReadStream('cat.png'), fs.createReadStream('dog.png')]}
The item's value can be either: Stream
, Request
, Buffer
or String
.
Pass Array
for any other multipart/[TYPE]
, defaults to multipart/related
:
// Example: Upload image to Google Drive
multipart: [
{
'Content-Type': 'application/json',
body: JSON.stringify({title: 'cat.png'})
},
{
'Content-Type': 'image/png',
body: fs.createReadStream('cat.png')
}
]
The body
key is required and reserved for setting up the item's body. It can be either: Stream
, Request
, Buffer
or String
.
Additionally you can set preambleCRLF
and/or postambleCRLF
to true
.
auth - digest auth requires @request/digest
{user: '', pass: '', sendImmediately: false}
- Sets the
Authorization: Basic ...
header. - The
sendImmediately
option default totrue
if omitted. - The
sendImmediately: false
options requires the redirect option to be enabled. - Digest authentication requires the @request/digest module.
- Sets the
{bearer: '', sendImmediately: false}
- Alternatively the
Authorization: Bearer ...
header can be set if using thebearer
option. - The rules for the
sendImmediately
option from above applies here.
- Alternatively the
oauth - requires @request/oauth
hawk - requires hawk
httpSignature - requires http-signature
aws - requires aws-sign2
gzip: true
- Pipes the response body to zlib Inflate or Gunzip stream based on the compression method specified in the
content-encoding
response header.
- Pipes the response body to zlib Inflate or Gunzip stream based on the compression method specified in the
gzip: 'gzip'
|gzip: 'deflate'
- Explicitly specify which decompression method to use.
encoding - requires iconv-lite
encoding: true
- Pipes the response body to iconv-lite stream, defaults to
utf8
.
- Pipes the response body to iconv-lite stream, defaults to
encoding: 'ISO-8859-1'
|encoding: 'win1251'
| ...- Specific encoding to use.
encoding: 'binary'
- Set
encoding
to'binary'
when expecting binary response.
- Set
cookie - requires tough-cookie
true
new require('tough-cookie).CookieJar(store, options)
true
defaults tofalse
if omitted
buffers the response body
function(err, res, body)
by default the response buffer is decoded into string usingutf8
. Set theencoding
property tobinary
if you expect binary data, or any other specific encoding
true
follow redirects forGET
,HEAD
,OPTIONS
andTRACE
requestsObject
- all follow all redirects
- max maximum redirects allowed
- removeReferer remove the
referer
header on redirect - allow
function (res)
user defined function to check if the redirect should be allowed
Number
integer containing the number of milliseconds to wait for a server to send response headers (and start the response body) before aborting the request. Note that if the underlying TCP connection cannot be established, the OS-wide TCP connection timeout will overrule the timeout option
String
url.Url
Object
{
proxy: 'http://localhost:6767'
//
proxy: url.parse('http://localhost:6767')
//
proxy: {
url: 'http://localhost:6767',
headers: {
allow: ['header-name'],
exclusive: ['header-name']
}
}
}
tunnel - requires tunnel-agent
true
{json: true}
- sets the
accept: application/json
header for the request - parses
JSON
orJSONP
response bodies (only if the server responds with the approprite headers)
- sets the
{json: function () {}}
- same as above but additionally passes a user defined reviver function to the
JSON.parse
method
- same as above but additionally passes a user defined reviver function to the
{qs: {sep:';', eq:':'}}
qs.parse
options to use
{querystring: {sep:';', eq:':', options: {}}}
use the [querystring][node-querystring] module insteadquerystring.parse
options to use
{qs: {sep:';', eq:':'}}
qs.stringify
options to use
{querystring: {sep:';', eq:':', options: {}}}
use the [querystring][node-querystring] module insteadquerystring.stringify
options to use
true
tries to automatically end the request onnextTick
_initialized
set when the outgoing HTTP request is fully initialized_started
set after first write/end_req
http.ClientRequest created in HTTPDuplex_res
http.IncomingMessage created in HTTPDuplex_client
http or https module_redirect
boolean indicating that the client is going to be redirected_redirected
boolean indicating that the client is been redirected at least once_src
the input read stream, usually from pipe_chunks
Array - the first chunk read from the input read stream_ended
whether the outgoing request has ended_auth
whether basic auth is being used_timeout
timeout timer instance
init
abort
- Request the HTTPDuplex child class
- init should be private I guess
- request req, options
- onresponse res - internal event to execute options response logic
- redirect res
- response res
- options emit @request/core options
- body emit raw response body, either
Buffer
orString
(thecallback
option is required) - json emit parsed JSON response body (the
callback
and theparse:{json:true}
options are required)
- headers is instance of the @request/headers module
- url contains the parsed URL
- redirect is converted to object containing all possible options including the
followed
state variable, containing the followed redirects count - auth containes
sent
state variable indicating whether the Basic auth is sent already - cookie is converted to object and containes the initial cookie
header
as a property - jar the internal tough-cookie jar
Requires @request/log
- req prints out the request
method
,url
, andheaders
- res prints out the response
statusCode
,statusMessage
, andheaders
- http prints out the options object passed to the underlying
http.request
method - raw prints out the raw
@request/core
options object right before sending the request - body prints out the raw request and response bodies (the response body is available only when the
callback
option is being used) - json prints out the parsed JSON response body (only if the response body is a JSON one, and if the
callback
andparse.json
options are being used)
$ DEBUG=req,res node app.js
oauth: transport_method: body requires method: POST and content-type: application/x-www-form-urlencoded
oauth: signature_method: PLAINTEXT not supported with body_hash signing
This module may contain code snippets initially implemented in request by request contributors.