Got
Human-friendly and powerful HTTP request library for Node.js
... in conjunction with got.extend() when you want to create an API client that, for example, uses HMAC-signing. You can override the request function by returning a ClientRequest-like instance or a IncomingMessage-like instance. This is very useful when creating a custom cache mechanism. The response object will typically be a Node.js HTTP response stream, however, if returned from the cache it will be a response-like object which behaves in the same way.