diff --git a/packages/frontend/editor-ui/src/composables/useImportCurlCommand.test.ts b/packages/frontend/editor-ui/src/composables/useImportCurlCommand.test.ts index 57880ccea0c..db4282d598a 100644 --- a/packages/frontend/editor-ui/src/composables/useImportCurlCommand.test.ts +++ b/packages/frontend/editor-ui/src/composables/useImportCurlCommand.test.ts @@ -474,6 +474,14 @@ describe('useImportCurlCommand', () => { ]); }); + test('Should parse cURL command with a comma in query parameter value', () => { + const curl = 'curl "https://example.com?bla=blu,bli"'; + const parameters = toHttpNodeParameters(curl); + expect(parameters.url).toBe('https://example.com'); + expect(parameters.sendQuery).toBe(true); + expect(parameters.queryParameters?.parameters).toEqual([{ name: 'bla', value: 'blu,bli' }]); + }); + test('Should parse cURL command with custom header and no content type', () => { const curl = 'curl -X GET https://reqbin.com/echo -H "Authorization: Bearer token"'; const parameters = toHttpNodeParameters(curl); diff --git a/packages/frontend/editor-ui/src/composables/useImportCurlCommand.ts b/packages/frontend/editor-ui/src/composables/useImportCurlCommand.ts index 4628b510e96..636267b9972 100644 --- a/packages/frontend/editor-ui/src/composables/useImportCurlCommand.ts +++ b/packages/frontend/editor-ui/src/composables/useImportCurlCommand.ts @@ -243,12 +243,24 @@ export const toHttpNodeParameters = (curlCommand: string): HttpNodeParameters => headers.authorization = `Basic ${encodeBasicAuthentication(user, pass)}`; } + // curlconverter does not parse query parameters correctly if they contain commas or semicolons + // so we need to parse it again + const url = new URL(curlJson.url); + const queries = curlJson.queries ?? {}; + for (const [key, value] of url.searchParams) { + queries[key] = value; + } + + url.search = ''; + // URL automatically adds a trailing slash if the path is empty + const urlString = url.pathname === '/' ? url.href.slice(0, -1) : url.href; + const httpNodeParameters: HttpNodeParameters = { - url: curlJson.url, + url: urlString, authentication: 'none', method: curlJson.method.toUpperCase(), ...extractHeaders({ ...headers, ...mapCookies(curlJson.cookies) }), - ...extractQueries(curlJson.queries), + ...extractQueries(queries), options: { redirect: { redirect: {},