diff --git a/index.js b/index.js index 4c8f417ee..074fdeb63 100644 --- a/index.js +++ b/index.js @@ -546,6 +546,10 @@ function normalizeArguments(url, opts) { }; const headers = lowercaseKeys(opts.headers); + if (!Object.keys(headers).includes('user-agent')) { + headers['user-agent'] = `${pkg.name}/${pkg.version} (https://github.com/sindresorhus/got)`; + } + for (const [key, value] of Object.entries(headers)) { if (is.nullOrUndefined(value)) { delete headers[key]; diff --git a/readme.md b/readme.md index 5401674bb..c190f8607 100644 --- a/readme.md +++ b/readme.md @@ -105,6 +105,15 @@ Type: `Object` Any of the [`https.request`](https://nodejs.org/api/https.html#https_https_request_options_callback) options. +###### headers + +Type: `Object`
+Default: `{}` + +Request headers. + +Existing headers will be overwritten. Headers set to `null` or `undefined` will be omitted. + ###### stream Type: `boolean`
@@ -635,7 +644,7 @@ const createTestServer = require('create-test-server'); ### User Agent -It's a good idea to set the `'user-agent'` header so the provider can more easily see how their resource is used. By default, it's the URL to this repo. +It's a good idea to set the `'user-agent'` header so the provider can more easily see how their resource is used. By default, it's the URL to this repo. You can omit this header by setting it to `null` or `undefined`. ```js const got = require('got'); @@ -646,6 +655,12 @@ got('sindresorhus.com', { 'user-agent': `my-module/${pkg.version} (https://github.com/username/my-module)` } }); + +got('sindresorhus.com', { + headers: { + 'user-agent': null + } +}); ``` ### 304 Responses diff --git a/test/headers.js b/test/headers.js index 82d528e28..f7d6537b8 100644 --- a/test/headers.js +++ b/test/headers.js @@ -128,21 +128,21 @@ test('stream as options.body sets content-length', async t => { test('remove null value headers', async t => { const {body} = await got(s.url, { headers: { - unicorns: null + 'user-agent': null } }); const headers = JSON.parse(body); - t.false(Reflect.has(headers, 'unicorns')); + t.false(Reflect.has(headers, 'user-agent')); }); test('remove undefined value headers', async t => { const {body} = await got(s.url, { headers: { - unicorns: undefined + 'user-agent': undefined } }); const headers = JSON.parse(body); - t.false(Reflect.has(headers, 'unicorns')); + t.false(Reflect.has(headers, 'user-agent')); }); test.after('cleanup', async () => {