diff --git a/packages/bruno-cli/src/runner/run-single-request.js b/packages/bruno-cli/src/runner/run-single-request.js index 79c54c59e..26bccc8b6 100644 --- a/packages/bruno-cli/src/runner/run-single-request.js +++ b/packages/bruno-cli/src/runner/run-single-request.js @@ -647,7 +647,8 @@ const runSingleRequest = async function ( let axiosInstance = makeAxiosInstance({ requestMaxRedirects: requestMaxRedirects, - disableCookies: options.disableCookies + disableCookies: options.disableCookies, + followRedirects: followRedirects }); if (request.ntlmConfig) { diff --git a/packages/bruno-cli/src/utils/axios-instance.js b/packages/bruno-cli/src/utils/axios-instance.js index d6162089e..f32bd85b9 100644 --- a/packages/bruno-cli/src/utils/axios-instance.js +++ b/packages/bruno-cli/src/utils/axios-instance.js @@ -71,7 +71,7 @@ const createRedirectConfig = (error, redirectUrl) => { * @see https://github.com/axios/axios/issues/695 * @returns {axios.AxiosInstance} */ -function makeAxiosInstance({ requestMaxRedirects = 5, disableCookies } = {}) { +function makeAxiosInstance({ requestMaxRedirects = 5, disableCookies, followRedirects = true } = {}) { let redirectCount = 0; /** @type {axios.AxiosInstance} */ @@ -113,6 +113,14 @@ function makeAxiosInstance({ requestMaxRedirects = 5, disableCookies } = {}) { error.response.headers['request-duration'] = end - start; if (redirectResponseCodes.includes(error.response.status)) { + if (!followRedirects) { + if (!disableCookies) { + saveCookies(error.config.url, error.response.headers); + } + + return Promise.reject(error); + } + if (redirectCount >= requestMaxRedirects) { // todo: needs to be discussed whether the original error response message should be modified or not return Promise.reject(error); diff --git a/packages/bruno-electron/src/ipc/network/axios-instance.js b/packages/bruno-electron/src/ipc/network/axios-instance.js index 7c59622e1..ea178f594 100644 --- a/packages/bruno-electron/src/ipc/network/axios-instance.js +++ b/packages/bruno-electron/src/ipc/network/axios-instance.js @@ -76,7 +76,8 @@ function makeAxiosInstance({ proxyConfig = {}, requestMaxRedirects = 5, httpsAgentRequestFields = {}, - interpolationOptions = {} + interpolationOptions = {}, + followRedirects = true } = {}) { /** @type {axios.AxiosInstance} */ const instance = axios.create({ @@ -277,6 +278,14 @@ function makeAxiosInstance({ // Attach the timeline to the response error.response.timeline = timeline; + if (!followRedirects) { + if (preferencesUtil.shouldStoreCookies()) { + saveCookies(error.config.url, error.response.headers); + } + + return Promise.reject(error); + } + if (redirectCount >= requestMaxRedirects) { const errorResponseData = error.response.data; timeline?.push({ diff --git a/packages/bruno-electron/src/ipc/network/index.js b/packages/bruno-electron/src/ipc/network/index.js index e6a612cac..70ac1d89c 100644 --- a/packages/bruno-electron/src/ipc/network/index.js +++ b/packages/bruno-electron/src/ipc/network/index.js @@ -149,7 +149,8 @@ const configureRequest = async ( proxyConfig, requestMaxRedirects, httpsAgentRequestFields, - interpolationOptions + interpolationOptions, + followRedirects }); if (request.ntlmConfig) {