lil-http
Version:
Tiny, lightweight, full featured HTTP client
178 lines (133 loc) • 4.93 kB
Markdown
# [lil](http://lil-js.github.io)'-http [][travis] [](https://waffle.io/lil-js/http) [](https://codeclimate.com/github/lil-js/http) [](https://gitter.im/lil-js/http)
<img align="center" height="150" src="http://lil-js.github.io/img/liljs-logo.png" />
Tiny, lightweight, full featured HTTP client for the browser.
<table>
<tr>
<td><b>Name</b></td><td>http</td>
</tr>
<tr>
<td><b>Version</b></td><td>0.1.17</td>
</tr>
<tr>
<td><b>Size</b></td><td>3 KB / 1 KB (gzipped)</td>
</tr>
<tr>
<td><b>Environment</b></td><td>Browser</td>
</tr>
</table>
## Features
- Simple fully configurable API
- Support any HTTP verb
- Built-in error handling
- Binary response handling support
- Content-Type autodiscovery
- Support auth credentials
- Request progress status report
- Support passing custom headers
- Transparent support for CORS (in IE)
- Simple request state handling based on callback
- Transparent payload JSON serializer
## Installation
Via [Bower](http://bower.io)
```bash
bower install lil-http
```
Via [Component](https://github.com/component/component)
```bash
component install lil-js/http
```
Or loading the script remotely
```html
<script src="//cdn.rawgit.com/lil-js/http/0.1.17/http.js"></script>
```
### Environments
- Chrome >= 5
- Firefox >= 3
- Safari >= 5
- Opera >= 10
- IE >= 9
### Usage
You could fetch de module via `require()` if it's available.
Otherwise, global fallback will be used, exposed via `lil.http`
##### Sample GET request
```js
lil.http.get('/sample.json', {
auth: { user: 'Tom', password: 'p@s$w0rD' }
headers: { 'X-Version': '0.1.0' }
}, function (err, res)) {
if (err) throw new Error('Cannot perform the request: ' + err.status)
if (res.status === 200) {
console.log(res.data)
}
})
```
##### Sample POST request
```js
lil.http.post('/register', {
data: { user: 'Tom' },
headers: { 'API-Key': '8c1c4180-36b5-11e4-8510-0800200c9a66' }
}, function (err, res)) {
if (err) throw new Error('Cannot register: ' + err.status)
if (res.status === 200) {
console.log('Registered!')
}
})
```
### Config options
- **url** `string` - Server request URL
- **data** `mixed` - Payload data to send as body request. See [MDN][sendXHR] for more information
- **params** `object` - Map of key-value query string params
- **headers** `object` - Map of strings representing HTTP headers to send to the server
- **timeout** `number` - Request maximum timeout in milliseconds. Default to 30 seconds
- **auth** `object` - Authentication credentials to the server. Object must have the `user` and `password` properties with `string` values
- **withCredentials** `boolean` - Whether to set the withCredentials flag on the XHR object. See [MDN][withcredentials] for more information
- **method** `string` - Request HTTP method. Default to `GET`
- **responseType** `string` - Define how to handle the response data. Allowed values are: `text`, `arraybuffer`, `blob` or `document`
### Response/error object
- **data** `mixed` - Body response. If the MIME type is `JSON-compatible`, it will be transparently parsed
- **status** `number` - HTTP response status code
- **headers** `object` - Response headers
- **xhr** `object` - Original XHR instance
- **error** `mixed` - Error info, usually an `Error` instance (in case that an error happens)
## API
#### http(url, options, cb, [ progressCb ])
#### http.get(url, options, cb, [ progressCb ])
#### http.post(url, options, cb, [ progressCb ])
#### http.put(url, options, cb, [ progressCb ])
#### http.delete(url, options, cb, [ progressCb ])
#### http.patch(url, options, cb, [ progressCb ])
#### http.head(url, options, cb, [ progressCb ])
#### http.defaults
Type: `object`
Default client config object
#### http.defaultContent
Type: `string` Value: `text/plain`
Default `Content-Type` request header value
#### http.VERSION
## Contributing
Wanna help? Cool! It will be appreciated :)
You must add new test cases for any new feature or refactor you do,
always following the same design/code patterns that already exist
### Development
Only [node.js](http://nodejs.org) is required for development
Clone the repository
```bash
$ git clone https://github.com/lil-js/http.git && cd http
```
Install dependencies
```bash
$ npm install
```
Generate browser bundle source
```bash
$ make browser
```
Run tests
```bash
$ make test
```
## License
[MIT](http://opensource.org/licenses/MIT) © Tomas Aparicio
[withcredentials]: https://developer.mozilla.org/es/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials
[sendXHR]: https://developer.mozilla.org/es/docs/XMLHttpRequest#send()
[travis]: http://travis-ci.org/lil-js/http