https://github.com/risan/send-request
Lightweight HTTP client for Node.
https://github.com/risan/send-request
http http-client request
Last synced: 2 months ago
JSON representation
Lightweight HTTP client for Node.
- Host: GitHub
- URL: https://github.com/risan/send-request
- Owner: risan
- License: mit
- Created: 2018-11-25T16:50:23.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2020-02-19T19:02:42.000Z (about 6 years ago)
- Last Synced: 2025-10-14T07:08:54.356Z (6 months ago)
- Topics: http, http-client, request
- Language: JavaScript
- Homepage:
- Size: 52.7 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Send Request
[](https://travis-ci.org/risan/send-request)
[](https://codecov.io/gh/risan/send-request)
[](https://www.npmjs.com/package/send-request)
Lightweight HTTP client for Node.
## Installation
```bash
$ npm install send-request
```
## Usage
Send HTTP GET request:
```js
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);
})();
```
## Recipes
### Handling Error
```js
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);
}
}
})();
```
### Send HTTP POST Request with 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`.
```js
const sendRequest = require("send-request");
(async () => {
const response = await sendRequest("https://httpbin.org/anything", {
method: "POST",
body: {
foo: "bar"
}
});
console.log(response.body);
})();
```
### Send HTTP Request with JSON 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`.
```js
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);
})();
```
### Sending File with FormData
You pass the [`FormData`](https://github.com/form-data/form-data) 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.
```js
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);
})();
```
## API
```js
sendRequest(url, [{
method,
headers,
auth: {
username,
password
},
body,
json,
encoding
}])
```
### Parameters
* **`url`** (*`String`*): The URL to send the HTTP request to.
* **`method`** (optional *`String`*): The HTTP method to use, default to `GET`.
* **`headers`** (optional *`Object`*): The request headers to send.
* **`auth.username`** (optional *`String`*): The username for HTTP basic auth.
* **`auth.password`** (optional *`String`*): The password for HTTP basic auth.
* **`body`** (optional *`Object|FormData`*): The request body to send. It can be a plain JavaScript object or an instance of [`FormData`](https://github.com/form-data/form-data).
* **`json`** (optional *Boolean*): Set to `true` if you want to send the request body with `application/json` content type. Default to `false`, which means that the request body will be sent as `application/x-www-form-urlencoded`. Note that you can still override the content type using the `headers` option.
* **`encoding`** (optional *`String`*|*`Null`*): The encoding to decode the incoming response. If set to `null`, the response's body will be a `Buffer` instance.
### Returns
It returns a `Promise` which when resolved contains a response object. Here's an example of a reponse object:
```js
{
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 is `application/json`.
## License
[MIT](https://github.com/risan/send-request/blob/master/LICENSE) © [Risan Bagja Pradana](https://risanb.com)