From 3f513f2f4d8f5db077a2e432fb9225c7c3a23022 Mon Sep 17 00:00:00 2001 From: prasanth <11557066+cedric05@users.noreply.github.com> Date: Wed, 13 Oct 2021 20:22:08 +0530 Subject: [PATCH] fix(request): multipart payload not working while using proxy --- .../helpers/strategies/AxiosStrategy.js | 21 +++++++++++++++---- packages/hoppscotch-app/package.json | 3 ++- pnpm-lock.yaml | 2 ++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/packages/hoppscotch-app/helpers/strategies/AxiosStrategy.js b/packages/hoppscotch-app/helpers/strategies/AxiosStrategy.js index 719b82d71..defd01d3b 100644 --- a/packages/hoppscotch-app/helpers/strategies/AxiosStrategy.js +++ b/packages/hoppscotch-app/helpers/strategies/AxiosStrategy.js @@ -1,4 +1,5 @@ import axios from "axios" +import { v4 } from "uuid" import { decodeB64StringToArrayBuffer } from "../utils/b64" import { settingsStore } from "~/newstore/settings" import { JsonFormattedError } from "~/helpers/utils/JsonFormattedError" @@ -14,13 +15,25 @@ export const cancelRunningAxiosRequest = () => { const axiosWithProxy = async (req) => { try { + let proxyReqPayload = { + ...req, + wantsBinary: true, + } + const headers = {} + if (req.data instanceof FormData) { + const key = `proxyRequestData-${v4()}` // generate UniqueKey + headers["multipart-part-key"] = key + + const formData = proxyReqPayload.data + proxyReqPayload.data = "" // discard formData + formData.append(key, JSON.stringify(proxyReqPayload)) // append axiosRequest to form + proxyReqPayload = formData + } const { data } = await axios.post( settingsStore.value.PROXY_URL || "https://proxy.hoppscotch.io", + proxyReqPayload, { - ...req, - wantsBinary: true, - }, - { + headers, cancelToken: cancelSource.token, } ) diff --git a/packages/hoppscotch-app/package.json b/packages/hoppscotch-app/package.json index ae212fad0..b4b2986db 100644 --- a/packages/hoppscotch-app/package.json +++ b/packages/hoppscotch-app/package.json @@ -38,6 +38,7 @@ "acorn": "^8.5.0", "acorn-walk": "^8.2.0", "axios": "^0.22.0", + "uuid": "8.3.2", "codemirror": "^5.63.1", "codemirror-theme-github": "^1.0.0", "core-js": "^3.18.2", @@ -119,4 +120,4 @@ "vue-jest": "^3.0.7", "worker-loader": "^3.0.8" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 451a54f95..fa705af54 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -97,6 +97,7 @@ importers: ts-jest: ^27.0.5 typescript: ^4.4.3 unplugin-vue2-script-setup: ^0.6.11 + uuid: 8.3.2 vue-apollo: ^3.0.8 vue-cli-plugin-apollo: ^0.22.2 vue-functional-data-merge: ^3.1.0 @@ -144,6 +145,7 @@ importers: socketio-wildcard: 2.0.0 splitpanes: 2.3.8 tern: 0.24.3 + uuid: 8.3.2 vue-apollo: 3.0.8_graphql-tag@2.12.5 vue-cli-plugin-apollo: 0.22.2_typescript@4.4.3 vue-functional-data-merge: 3.1.0