Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ethan7g/phin
Node HTTP client
https://github.com/ethan7g/phin
http http-client https javascript node nodejs npm phin request
Last synced: 5 days ago
JSON representation
Node HTTP client
- Host: GitHub
- URL: https://github.com/ethan7g/phin
- Owner: ethan7g
- License: mit
- Created: 2017-02-21T07:12:21.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2024-04-11T00:46:08.000Z (10 months ago)
- Last Synced: 2025-01-08T19:02:03.489Z (13 days ago)
- Topics: http, http-client, https, javascript, node, nodejs, npm, phin, request
- Language: JavaScript
- Homepage:
- Size: 3.5 MB
- Stars: 576
- Watchers: 9
- Forks: 33
- Open Issues: 24
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
README
---
> The lightweight Node.js HTTP client
[Full documentation](https://ethanent.github.io/phin/global.html) | [GitHub](https://github.com/ethanent/phin) | [NPM](https://www.npmjs.com/package/phin)
## Deprecation warning
Some versions of this package are deprecated and shouldn't be used. Be sure you are using a non-deprecated, supported version of the package.
## Simple Usage
```javascript
const p = require('phin')const res = await p('https://ethanent.me')
console.log(res.body)
```Note that the above should be in an async context! Phin also provides an unpromisified version of the library.
## Install
```
npm install phin
```## Why Phin?
Phin is relied upon by important projects and large companies. The hundreds of contributors at [Less](https://github.com/less/less.js), for example, depend on Phin as part of their development process.
Also, Phin is very lightweight. To compare to other libraries, see [Phin vs. the Competition](https://github.com/ethanent/phin/blob/master/README.md#phin-vs-the-competition).
## Quick Demos
Simple POST:
```js
await p({
url: 'https://ethanent.me',
method: 'POST',
data: {
hey: 'hi'
}
})
```### Unpromisified Usage
```js
const p = require('phin').unpromisifiedp('https://ethanent.me', (err, res) => {
if (!err) console.log(res.body)
})
```Simple parsing of JSON:
```js
// (In async function in this case.)const res = await p({
'url': 'https://ethanent.me/name',
'parse': 'json'
})console.log(res.body.first)
```### Default Options
```js
const ppostjson = p.defaults({
'method': 'POST',
'parse': 'json',
'timeout': 2000
})// In async function...
const res = await ppostjson('https://ethanent.me/somejson')
// ^ An options object could also be used here to set other options.// Do things with res.body?
```### Custom Core HTTP Options
Phin allows you to set [core HTTP options](https://nodejs.org/api/http.html#http_http_request_url_options_callback).
```js
await p({
'url': 'https://ethanent.me/name',
'core': {
'agent': myAgent // Assuming you'd already created myAgent earlier.
}
})
```## Full Documentation
There's a lot more which can be done with the Phin library.
See [the Phin documentation](https://ethanent.github.io/phin/global.html).
## Phin vs. the Competition
Phin is a very lightweight library, yet it contains all of the common HTTP client features included in competing libraries!
Here's a size comparison table:
Package | Size
--- | ---
request | [![request package size](https://packagephobia.now.sh/badge?p=request)](https://packagephobia.now.sh/result?p=request)
superagent | [![superagent package size](https://packagephobia.now.sh/badge?p=superagent)](https://packagephobia.now.sh/result?p=superagent)
got | [![got package size](https://packagephobia.now.sh/badge?p=got)](https://packagephobia.now.sh/result?p=got)
axios | [![axios package size](https://packagephobia.now.sh/badge?p=axios)](https://packagephobia.now.sh/result?p=axios)
isomorphic-fetch | [![isomorphic-fetch package size](https://packagephobia.now.sh/badge?p=isomorphic-fetch)](https://packagephobia.now.sh/result?p=isomorphic-fetch)
r2 | [![r2 package size](https://packagephobia.now.sh/badge?p=r2)](https://packagephobia.now.sh/result?p=r2)
node-fetch | [![node-fetch package size](https://packagephobia.now.sh/badge?p=node-fetch)](https://packagephobia.now.sh/result?p=node-fetch)
phin | [![phin package size](https://packagephobia.now.sh/badge?p=phin)](https://packagephobia.now.sh/result?p=phin)