# Native Request
[![npm version](https://badge.fury.io/js/native-request.svg)](https://badge.fury.io/js/native-request)  ![npm](https://img.shields.io/npm/dm/native-request)

### v1.1 has been released


Native Request is a simple module that makes you create native node.js requests supports https.

  - supports HTTPS
  - 0 dependencies
  - use callbacks




## Table of Contents  
[Installation](#installation)  
[Usage](#usage)

## Planned features

 - 1.2.0: Proxy management
 

## Installation

Install the dependencies and devDependencies and start the server.

```bash
npm install native-request
```

## Usage

### JSON request (recommended)
 - request.request(options, callback)

Easy

```js
let request = require('native-request');

request.request({
        url: "http://github.com/",
        method: 'POST',
    }, function(err, data, status, headers) {
        console.log(status); //200
        console.log(data); // page content
        console.log(headers); // response headers
});

```

Full
```js
let request = require('native-request');

request.request({
        url: "http://github.com/",
        method: 'POST',
        Cookies: { john: "doe", human: true },
        headers: {
            authorization: "Token121"
        },
        requestOptions: {
            followRedirect: false,
            maxRedirect: 1,
            trustRedirect: false
        }

    }, function(err, data, status, headers) {
        console.log(status); //200
        console.log(data); // page content
        console.log(headers); // response headers
});

```

#### Parameters
| Options | Required  | Type  | Parameters |  Default 
|:--|:--:|:--: |-- |:--: |
| url | ✓ | String |Target url | |
| method| ✓ | String|HTTP method to use. More info [here](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) | |
| Headers | | JSON Object | Pass headers to the request with a JSON format.  | `{"content-type": "application/json"}` |
| Cookies| | JSON Object | Pass cookies to the request with a JSON format  | |
| requestOptions|  | See below |


#### RequestOptions
The parameters below are here for client configuration. None of these parameters will be sent.
These parameters must be put in the object '**requestOptions**'

 | Options | Required | Type | Parameters |  Default
|:--|:--:|:--: | -- | :--: |
| followRedirect |  | boolean | Decide if we should follow the redirects | true
| maxRedirect|  | int| Decide the maximum number of redirects allowed | 3
| trustRedirect|  | boolean | If **false**, headers will not be sent when a redirect happen  | true








### GET request
 -  request.get(path, headers, callback)
 -  request.get(path, callback)



```js
let request = require('native-request');
request.get('https://github.com', function(err, data, status, headers) {
    if (err) {
        throw err;
    }
    console.log(status); //200
    console.log(data); // page content
    console.log(headers); // response headers
});
```
To add custom **headers** just do like this:
```js
let request = require('native-request');

let headers = {
    "content-type": "plain/text"
}
request.get('https://github.com', headers, function(err, data, status, headers) {
    if (err) {
        throw err;
    }
    console.log(status); //200
    console.log(data); // page content
    console.log(headers); // response headers
});
```
### POST request
 -  request.post(path, callback)
 -  request.post(path, data, callback)
 -  request.post(path, data, headers, callback)

 
To send an empty **post**:
```js
let request = require('native-request');
request.post('https://github.com', function(err, data, status, headers) {
    if (err) {
        throw err;
    }
    console.log(status); //200
    console.log(data); // page content
    console.log(headers); // response headers
});
```

With headers and data:

```js
let request = require('native-request');

let data = {
    "example": true,
}
let headers = {
    "content-type": "plain/text"
}
request.post('https://github.com', data, headers, function(err, data, status, headers) {
    if (err) {
        throw err;
    }
    console.log(status); //200
    console.log(data); // page content
    console.log(headers); // response headers
});
```


### License
MIT. Copyright (c) Samuel Marchese.
