Skip to content

Issues a fetch() request from a HAR file

License

Notifications You must be signed in to change notification settings

readmeio/fetch-har

Folders and files

NameName
Last commit message
Last commit date
Feb 1, 2025
Mar 2, 2025
Mar 2, 2025
Apr 28, 2022
Sep 27, 2023
Apr 28, 2022
Jun 1, 2023
Apr 28, 2022
Sep 11, 2023
Feb 1, 2025
Sep 27, 2023
Sep 27, 2023
Mar 2, 2025
Mar 2, 2025
Mar 6, 2024
Sep 27, 2023

Repository files navigation

fetch-har

Make a fetch request from a HAR definition.

CI License

Features

  • 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, or fetch-mock.

Installation

npm install --save fetch-har

Usage

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);

API

Options

userAgent

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' });
files

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.

init

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.