Make a fetch request from a HAR definition.
- Supports Node 18+
- Natively works in all browsers that support fetch without having to use any polyfills.
- Tested across Chrome, Safari, Firefox on Mac, Windows, and Linux.
- Requests can be mocked with HTTP mocking libraries like
nock,msw, orfetch-mock.
npm install --save fetch-har import fetchHAR from 'fetch-har'; const har = { log: { entries: [ { request: { headers: [ { name: 'Authorization', value: 'Bearer api-key', }, { name: 'Content-Type', value: 'application/json', }, ], queryString: [ { name: 'a', value: 1 }, { name: 'b', value: 2 }, ], postData: { mimeType: 'application/json', text: '{"id":8,"category":{"id":6,"name":"name"},"name":"name"}', }, method: 'POST', url: 'http://httpbin.org/post', }, }, ], }, }; fetchHAR(har) .then(res => res.json()) .then(console.log);A custom User-Agent header to apply to your request. Please note that browsers have their own handling for these headers in fetch() calls so it may not work everywhere; it will always be sent in Node however.
await fetchHAR(har, { userAgent: 'my-client/1.0' });An optional object map you can supply to use for multipart/form-data file uploads in leu of relying on if the HAR you have has data URLs. It supports Node file buffers and the File API.
await fetchHAR(har, { files: { 'owlbert.png': await fs.readFile('./owlbert.png'), 'file.txt': document.querySelector('#some-file-input').files[0], }, });If you don't supply this option fetch-har will fallback to the data URL present within the supplied HAR. If no files option is present, and no data URL (via param.value) is present in the HAR, a fatal exception will be thrown.
This optional argument lets you supply any option that's available to supply to the Request constructor.
await fetchHAR(har, { init: { headers: new Headers({ 'x-custom-header': 'buster', }), }, });Caution
If you supply body or credentials to this option they may be overridden by what your HAR requires.
