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.
