Got
Human-friendly and powerful HTTP request library for Node.js
...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.