From badf6dcdc2466b95d93b49ab5d97d54f4d45af55 Mon Sep 17 00:00:00 2001 From: Sefa Ilkimen Date: Wed, 7 Jul 2021 03:16:43 +0200 Subject: [PATCH] fix: #372 [Bug] Android: malformed empty multipart requests --- .../com/silkimen/cordovahttp/CordovaHttpBase.java | 5 +++-- test/e2e-specs.js | 11 +++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/android/com/silkimen/cordovahttp/CordovaHttpBase.java b/src/android/com/silkimen/cordovahttp/CordovaHttpBase.java index d3b028c..3802e75 100644 --- a/src/android/com/silkimen/cordovahttp/CordovaHttpBase.java +++ b/src/android/com/silkimen/cordovahttp/CordovaHttpBase.java @@ -189,8 +189,9 @@ abstract class CordovaHttpBase implements Runnable { } // prevent sending malformed empty multipart requests (#372) - if (buffers.length == 0) { - request.contentType(HttpRequest.CONTENT_TYPE_FORM); + if (buffers.length() == 0) { + request.contentType("multipart/form-data; boundary=00content0boundary00"); + request.send("\r\n--00content0boundary00--\r\n"); } } } diff --git a/test/e2e-specs.js b/test/e2e-specs.js index 89f5046..082feb6 100644 --- a/test/e2e-specs.js +++ b/test/e2e-specs.js @@ -1121,11 +1121,18 @@ const tests = [ var options = { method: 'post', data: formData }; cordova.plugin.http.sendRequest(url, options, resolve, reject); }, - validationFunc: function (driver, result) { + validationFunc: function (driver, result, targetInfo) { helpers.checkResult(result, 'resolved'); var parsed = JSON.parse(result.data.data); - parsed.headers['Content-Type'].should.be.equal('application/x-www-form-urlencoded'); + + if (targetInfo.isAndroid) { + // boundary should be sent correctly on Android + parsed.headers['Content-Type'].should.be.equal('multipart/form-data; boundary=00content0boundary00'); + } else { + // falling back to empty url encoded request on iOS + parsed.headers['Content-Type'].should.be.equal('application/x-www-form-urlencoded'); + } } }, ];