Lightweight HTTP client for Node.
$ npm install send-request
Send HTTP GET request:
const sendRequest = require("send-request");
(async () => {
const response = await sendRequest("https://httpbin.org/json");
console.log(`Status Code: ${response.statusCode}`);
console.log({ headers: response.headers });
console.log(response.body); // Response as a string
// If response's content type is a JSON, you get the parsed object.
console.log(response.json);
})();
const sendRequest = require("send-request");
(async () => {
try {
const response = await sendRequest("https://httpbin.org/status/400");
} catch(error) {
console.log(error.message);
// If it's an HTTP error, it will have response property.
if (error.response) {
console.log(error.response.statusCode); // 400
console.log(error.response.statusMessage);
console.log(error.response.headers);
console.log(error.response.body);
}
}
})();
If you don't set the content-type
and content-length
headers, it will be automatically added. The content-type
will be set to application/x-www-form-urlencoded
.
const sendRequest = require("send-request");
(async () => {
const response = await sendRequest("https://httpbin.org/anything", {
method: "POST",
body: {
foo: "bar"
}
});
console.log(response.body);
})();
If you don't set the content-type
and content-length
headers, it will be automatically added. The content-type
will be set to application/json
.
const sendRequest = require("send-request");
(async () => {
const response = await sendRequest("https://httpbin.org/anything", {
method: "POST",
body: {
foo: "bar"
},
json: true // Must be set to true
});
console.log(response.json);
})();
You pass the FormData
instance as a body
. If you don't set the content-type
and content-length
headers, it will be automatically added. The content-type
will be set to multipart/form-data
. The json
option won't have any effect.
const fs = require("fs");
const sendRequest = require("send-request");
const FormData = require("form-data");
(async () => {
const file = fs.createReadStream("./test.txt");
const form = new FormData();
form.append("foo", "bar");
form.append("my_file", file);
const response = await sendRequest("https://httpbin.org/anything", {
method: "POST",
body: form
});
console.log(response);
})();
sendRequest(url, [{
method,
headers,
auth: {
username,
password
},
body,
json,
encoding
}])
url
(String
): The URL to send the HTTP request to.method
(optionalString
): The HTTP method to use, default toGET
.headers
(optionalObject
): The request headers to send.auth.username
(optionalString
): The username for HTTP basic auth.auth.password
(optionalString
): The password for HTTP basic auth.body
(optionalObject|FormData
): The request body to send. It can be a plain JavaScript object or an instance ofFormData
.json
(optional Boolean): Set totrue
if you want to send the request body withapplication/json
content type. Default tofalse
, which means that the request body will be sent asapplication/x-www-form-urlencoded
. Note that you can still override the content type using theheaders
option.encoding
(optionalString
|Null
): The encoding to decode the incoming response. If set tonull
, the response's body will be aBuffer
instance.
It returns a Promise
which when resolved contains a response object. Here's an example of a reponse object:
{
statusCode: 200,
statusMessage: "OK",
headers: {
"content-type": "application/json"
},
body: '{"foo": "bar"}',
json: {
foo: "bar"
}
}
statusCode
(Number): The HTTP status code.statusMessage
(Number): The HTTP status message (reason phrase).headers
(Object): The response's headers.body
(String): The response's body.json
(Object): The parsed JSON body. It only exist if the response's content type isapplication/json
.