diff --git a/packages/bruno-electron/src/utils/axios-instance.js b/packages/bruno-electron/src/utils/axios-instance.js index dce06fffa..9ded8183b 100644 --- a/packages/bruno-electron/src/utils/axios-instance.js +++ b/packages/bruno-electron/src/utils/axios-instance.js @@ -72,7 +72,7 @@ const checkConnection = (host, port) => function makeAxiosInstance({ proxyMode = 'off', proxyConfig = {}, - requestMaxRedirects = 0, + requestMaxRedirects = 5, httpsAgentRequestFields = {}, interpolationOptions = {} } = {}) { @@ -278,7 +278,20 @@ function makeAxiosInstance({ // Increase redirect count redirectCount++; - const redirectUrl = error.response.headers.location; + const locationHeader = error.response.headers.location; + let redirectUrl = locationHeader; + + // Handle relative URLs by resolving them against the original request URL + if (locationHeader && !locationHeader.match(/^https?:\/\//i)) { + // It's a relative URL, resolve it against the original URL + redirectUrl = URL.resolve(error.config.url, locationHeader); + + metadata.timeline.push({ + timestamp: new Date(), + type: 'info', + message: `Resolving relative redirect URL: ${locationHeader} → ${redirectUrl}`, + }); + } if (preferencesUtil.shouldStoreCookies()) { saveCookies(redirectUrl, error.response.headers); @@ -294,7 +307,7 @@ function makeAxiosInstance({ }; if (preferencesUtil.shouldSendCookies()) { - const cookieString = getCookieStringForUrl(error.response.headers.location); + const cookieString = getCookieStringForUrl(redirectUrl); if (cookieString && typeof cookieString === 'string' && cookieString.length) { requestConfig.headers['cookie'] = cookieString; } diff --git a/packages/bruno-electron/src/utils/request.js b/packages/bruno-electron/src/utils/request.js index e7ed7b3e7..44f5cc376 100644 --- a/packages/bruno-electron/src/utils/request.js +++ b/packages/bruno-electron/src/utils/request.js @@ -579,7 +579,13 @@ const configureRequest = async ( request = newRequest let requestMaxRedirects = request.maxRedirects - request.maxRedirects = 0 + // Don't override maxRedirects here, let it be controlled by the request object + // request.maxRedirects = 0 + + // Set default value for requestMaxRedirects if not explicitly set + if (requestMaxRedirects === undefined) { + requestMaxRedirects = 5; // Default to 5 redirects + } let axiosInstance = makeAxiosInstance({ proxyMode,