Got
Human-friendly and powerful HTTP request library for Node.js
...For something more scalable you could use an official Keyv storage adapter. Hooks allow modifications during the request lifecycle. Hook functions may be async and are run serially. Got will make no further changes to the request before it is sent. This is especially useful 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. ...