mirror of
https://github.com/usebruno/bruno.git
synced 2026-07-02 00:54:09 +00:00
fix(bru-2035): form-urlencoded logic updates (#5820)
This commit is contained in:
@@ -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') {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user