From f5bd740c707bbf6f101550c4cbf647aaac409174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Sexenian?= <99925035+tomas-sexenian@users.noreply.github.com> Date: Mon, 17 Feb 2025 16:23:21 -0300 Subject: [PATCH 1/3] Remove extra line break --- common/src/main/java/com/genexus/internet/GXHttpClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/com/genexus/internet/GXHttpClient.java b/common/src/main/java/com/genexus/internet/GXHttpClient.java index a939b164e..81f9da492 100644 --- a/common/src/main/java/com/genexus/internet/GXHttpClient.java +++ b/common/src/main/java/com/genexus/internet/GXHttpClient.java @@ -792,7 +792,7 @@ String getHeaderTemplate(String name, String fileName, String mimeType){ } String getFormDataTemplate(String varName, String value){ String contentType = getContentTypeFromString(value); - return "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"" + varName + "\"\r\n" + ((contentType != null)? "Content-Type: " + contentType + "\r\n" : "") + "\r\n" + value; + return "--" + boundary + "\r\nContent-Disposition: form-data; name=\"" + varName + "\"\r\n" + ((contentType != null)? "Content-Type: " + contentType + "\r\n" : "") + "\r\n" + value; } private String getContentTypeFromString(String value){ From 707572d4627636da712779be5aee20cc6ea6f058 Mon Sep 17 00:00:00 2001 From: iroqueta Date: Wed, 19 Feb 2025 14:55:22 -0300 Subject: [PATCH 2/3] Handle boundaries in multipart request --- common/src/main/java/com/genexus/internet/GXHttpClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/com/genexus/internet/GXHttpClient.java b/common/src/main/java/com/genexus/internet/GXHttpClient.java index 81f9da492..60ebbe843 100644 --- a/common/src/main/java/com/genexus/internet/GXHttpClient.java +++ b/common/src/main/java/com/genexus/internet/GXHttpClient.java @@ -792,7 +792,7 @@ String getHeaderTemplate(String name, String fileName, String mimeType){ } String getFormDataTemplate(String varName, String value){ String contentType = getContentTypeFromString(value); - return "--" + boundary + "\r\nContent-Disposition: form-data; name=\"" + varName + "\"\r\n" + ((contentType != null)? "Content-Type: " + contentType + "\r\n" : "") + "\r\n" + value; + return "--" + boundary + "\r\nContent-Disposition: form-data; name=\"" + varName + "\"\r\n" + ((contentType != null)? "Content-Type: " + contentType + "\r\n" : "") + "\r\n" + value + "\r\n"; } private String getContentTypeFromString(String value){ From 9b44b46bb49753cb6eb4307dd28274de271bbd39 Mon Sep 17 00:00:00 2001 From: iroqueta Date: Thu, 20 Feb 2025 15:48:11 -0300 Subject: [PATCH 3/3] Handle boundaries in multipart request --- .../main/java/com/genexus/internet/GXHttpClient.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/com/genexus/internet/GXHttpClient.java b/common/src/main/java/com/genexus/internet/GXHttpClient.java index 60ebbe843..b693bf406 100644 --- a/common/src/main/java/com/genexus/internet/GXHttpClient.java +++ b/common/src/main/java/com/genexus/internet/GXHttpClient.java @@ -568,15 +568,22 @@ protected String setPathUrl(String url) { return url; } + boolean firstMultiPart; @SuppressWarnings("unchecked") protected byte[] getData() { byte[] out = new byte[0]; + firstMultiPart = false; + int variablesCount = getVariablesToSend().size(); + int count = 1; for (Object key: getVariablesToSend().keySet()) { + if (count == variablesCount) + firstMultiPart = true; String value = getMultipartTemplate().getFormDataTemplate((String)key, (String)getVariablesToSend().get(key)); getContentToSend().add(0, value); //Variables al principio + count++; } for (int idx = 0; idx < getContentToSend().size(); idx++) @@ -792,7 +799,10 @@ String getHeaderTemplate(String name, String fileName, String mimeType){ } String getFormDataTemplate(String varName, String value){ String contentType = getContentTypeFromString(value); - return "--" + boundary + "\r\nContent-Disposition: form-data; name=\"" + varName + "\"\r\n" + ((contentType != null)? "Content-Type: " + contentType + "\r\n" : "") + "\r\n" + value + "\r\n"; + String beginformDataTemplate = "\r\n--"; + if (firstMultiPart) + beginformDataTemplate = "--"; + return beginformDataTemplate + boundary + "\r\nContent-Disposition: form-data; name=\"" + varName + "\"\r\n" + ((contentType != null)? "Content-Type: " + contentType + "\r\n" : "") + "\r\n" + value; } private String getContentTypeFromString(String value){