fix(bru-2035): form-urlencoded logic updates (#5820)

This commit is contained in:
lohit
2025-10-17 18:22:43 +05:30
committed by GitHub
parent 7d8fde9180
commit a4b1941817
15 changed files with 375 additions and 112 deletions

View File

@@ -19,13 +19,13 @@ const { shouldUseProxy, PatchedHttpsProxyAgent, getSystemProxyEnvVariables } = r
const path = require('path');
const { parseDataFromResponse } = require('../utils/common');
const { getCookieStringForUrl, saveCookies } = require('../utils/cookies');
const { createFormData, buildFormUrlEncodedPayload } = require('../utils/form-data');
const { createFormData } = require('../utils/form-data');
const protocolRegex = /^([-+\w]{1,25})(:?\/\/|:)/;
const { NtlmClient } = require('axios-ntlm');
const { addDigestInterceptor } = require('@usebruno/requests');
const { getCACertificates } = require('@usebruno/requests');
const { getOAuth2Token } = require('../utils/oauth2');
const { encodeUrl } = require('@usebruno/common').utils;
const { encodeUrl, buildFormUrlEncodedPayload } = require('@usebruno/common').utils;
const onConsoleLog = (type, args) => {
console[type](...args);
@@ -332,8 +332,14 @@ const runSingleRequest = async function (
const contentTypeHeader = Object.keys(request.headers).find(
name => name.toLowerCase() === 'content-type'
);
if (contentTypeHeader && request.headers[contentTypeHeader] === 'application/x-www-form-urlencoded') {
request.data = buildFormUrlEncodedPayload(request.data);
if (Array.isArray(request.data)) {
request.data = buildFormUrlEncodedPayload(request.data);
} else if (typeof request.data !== 'string') {
request.data = qs.stringify(request.data, { arrayFormat: 'repeat' });
}
// if `data` is of string type - return as-is (assumes already encoded)
}
if (contentTypeHeader && request.headers[contentTypeHeader] === 'multipart/form-data') {

View File

@@ -3,24 +3,6 @@ const FormData = require('form-data');
const fs = require('fs');
const path = require('path');
/**
* @param {Array.<object>} params The request body Array
* @returns {string} Returns a order respecting standard compliant string of form encoded values
*/
const buildFormUrlEncodedPayload = (params) => {
if (typeof params !== 'object') return '';
if (!Array.isArray(params)) return '';
const resultParams = new URLSearchParams();
for (const param of params) {
// Invalid items are ignored
if (typeof param !== 'object') continue;
if (!('name' in param)) continue;
resultParams.append(param.name, param.value ?? '');
}
return resultParams.toString();
};
const createFormData = (data, collectionPath) => {
// make axios work in node using form data
// reference: https://github.com/axios/axios/issues/1006#issuecomment-320165427
@@ -56,6 +38,5 @@ const createFormData = (data, collectionPath) => {
};
module.exports = {
buildFormUrlEncodedPayload,
createFormData
}