diff --git a/lib/utils/request-wrapper.js b/lib/utils/request-wrapper.js index f464de12a4..342d6699cc 100644 --- a/lib/utils/request-wrapper.js +++ b/lib/utils/request-wrapper.js @@ -86,14 +86,12 @@ const requestWrapper = (url, options) => { // referer if (!options.headers.referer && !options.headers.Referer) { - const protocol = url.match('https?://'); - url = url.replace(/(https?:)?\/\//, ''); - const domain = url - .split('.') - .slice(-2) - .join('.') - .split('/')[0]; - options.headers.referer = (protocol ? protocol[0] : 'https://') + 'www.' + domain; + const urlHandler = new URL(url); + options.headers.referer = urlHandler.origin; + } + if (!options.headers.host && !options.headers.Host) { + const urlHandler = new URL(url); + options.headers.host = urlHandler.host; } }; diff --git a/test/utils/request-wrapper.js b/test/utils/request-wrapper.js index 429fa94827..9e51f441e1 100644 --- a/test/utils/request-wrapper.js +++ b/test/utils/request-wrapper.js @@ -40,18 +40,18 @@ describe('got', () => { it('headers', async () => { nock(/rsshub\.test/) .get(/.*/) - .times(4) + .times(3) .reply(function() { expect(this.req.headers.server).toBe('RSSHub'); - expect(this.req.headers.referer).toBe('http://www.rsshub.test'); + expect(this.req.headers.referer).toBe('http://api.rsshub.test'); + expect(this.req.headers.host).toBe('api.rsshub.test'); return [200, simpleResponse]; }); - await got.get('http://rsshub.test/test'); - await got.get('http://rsshub.test'); await got.get('http://api.rsshub.test/test'); + await got.get('http://api.rsshub.test'); - await parser.parseURL('http://rsshub.test/test'); + await parser.parseURL('http://api.rsshub.test/test'); }); it('proxy socks', async () => {