diff --git a/packages/playwright-core/src/server/fetch.ts b/packages/playwright-core/src/server/fetch.ts index 84435874e3..d0433f8996 100644 --- a/packages/playwright-core/src/server/fetch.ts +++ b/packages/playwright-core/src/server/fetch.ts @@ -231,7 +231,7 @@ export abstract class FetchRequest extends SdkObject { delete headers[`content-type`]; } - const redirectOptions: http.RequestOptions & { maxRedirects: number, deadline: number } = { + const redirectOptions: https.RequestOptions & { maxRedirects: number, deadline: number } = { method, headers, agent: options.agent, @@ -239,6 +239,9 @@ export abstract class FetchRequest extends SdkObject { timeout: options.timeout, deadline: options.deadline }; + // rejectUnauthorized = undefined is treated as true in node 12. + if (options.rejectUnauthorized === false) + redirectOptions.rejectUnauthorized = false; // HTTP-redirect fetch step 4: If locationURL is null, then return response. if (response.headers.location) { diff --git a/tests/global-fetch.spec.ts b/tests/global-fetch.spec.ts index 460ebf439f..57561c9e7f 100644 --- a/tests/global-fetch.spec.ts +++ b/tests/global-fetch.spec.ts @@ -146,6 +146,13 @@ it('should support global ignoreHTTPSErrors option', async ({ playwright, httpsS expect(response.status()).toBe(200); }); +it('should propagate ignoreHTTPSErrors on redirects', async ({ playwright, httpsServer }) => { + httpsServer.setRedirect('/redir', '/empty.html'); + const request = await playwright.request.newContext(); + const response = await request.get(httpsServer.PREFIX + '/redir', { ignoreHTTPSErrors: true }); + expect(response.status()).toBe(200); +}); + it('should resolve url relative to gobal baseURL option', async ({ playwright, server }) => { const request = await playwright.request.newContext({ baseURL: server.PREFIX }); const response = await request.get('/empty.html');