You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by fs...@apache.org on 2021/04/27 18:59:57 UTC

[jmeter] branch master updated: POST application/x-www-form-urlencoded cURL code generated from Postman is not imported correctly

This is an automated email from the ASF dual-hosted git repository.

fschumacher pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jmeter.git


The following commit(s) were added to refs/heads/master by this push:
     new 5f5b816  POST application/x-www-form-urlencoded cURL code generated from Postman is not imported correctly
5f5b816 is described below

commit 5f5b8166402fbe66ba2aadc51ccdc284d9c8c030
Author: Felix Schumacher <fe...@internetallee.de>
AuthorDate: Tue Apr 27 20:57:27 2021 +0200

    POST application/x-www-form-urlencoded cURL code generated from Postman is not imported correctly
    
    Allow multiple occurrences of --data-urlencode options and empty key and value on that option.
    The data will be added as post data and not as form data, which is a bit inconvenient and asked for
    in the same issue entry.
    
    Bugzilla Id: 65270
---
 .../jmeter/protocol/http/curl/BasicCurlParser.java |  5 +++-
 .../apache/jmeter/curl/BasicCurlParserTest.java    | 34 ++++++++++++++++++++++
 xdocs/changes.xml                                  |  1 +
 3 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/curl/BasicCurlParser.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/curl/BasicCurlParser.java
index 3533576..ca869b9 100644
--- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/curl/BasicCurlParser.java
+++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/curl/BasicCurlParser.java
@@ -561,7 +561,7 @@ public class BasicCurlParser {
     private static final CLOptionDescriptor D_DATA_BINARY_OPT = new CLOptionDescriptor("data-binary",
             CLOptionDescriptor.ARGUMENT_REQUIRED, DATA_BINARY_OPT, "HTTP POST binary data ");
     private static final CLOptionDescriptor D_DATA_URLENCODE_OPT = new CLOptionDescriptor("data-urlencode",
-            CLOptionDescriptor.ARGUMENT_REQUIRED, DATA_URLENCODE_OPT, "HTTP POST url encoding data ");
+            CLOptionDescriptor.ARGUMENT_REQUIRED | CLOptionDescriptor.DUPLICATES_ALLOWED, DATA_URLENCODE_OPT, "HTTP POST url encoding data ");
     private static final CLOptionDescriptor D_DATA_RAW_OPT = new CLOptionDescriptor("data-raw",
             CLOptionDescriptor.ARGUMENT_REQUIRED, DATA_RAW_OPT, "HTTP POST url allowed '@' ");
     private static final CLOptionDescriptor D_FORM_OPT = new CLOptionDescriptor("form",
@@ -718,6 +718,9 @@ public class BasicCurlParser {
                 } else if (DATAS_OPT.contains(option.getDescriptor().getId())) {
                     String value = option.getArgument(0);
                     String dataOptionName = option.getDescriptor().getName();
+                    if (value == null) {
+                        value = "";
+                    }
                     value = getPostDataByDifferentOption(value.trim(), dataOptionName);
                     if ("GET".equals(request.getMethod())) {
                         request.setMethod("POST");
diff --git a/src/protocol/http/src/test/java/org/apache/jmeter/curl/BasicCurlParserTest.java b/src/protocol/http/src/test/java/org/apache/jmeter/curl/BasicCurlParserTest.java
index 83a4ad7..53ade9f 100644
--- a/src/protocol/http/src/test/java/org/apache/jmeter/curl/BasicCurlParserTest.java
+++ b/src/protocol/http/src/test/java/org/apache/jmeter/curl/BasicCurlParserTest.java
@@ -26,6 +26,7 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Path;
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.io.FileUtils;
@@ -49,6 +50,39 @@ public class BasicCurlParserTest {
     }
 
     @Test
+    public void testBug65270SingleEqualsWithDataUrlEncodeOptions() {
+        String cmdLine = String.join(" \\\n",
+        Arrays.asList("curl --location --request POST 'https://example.invalid/access/token'",
+        "--header 'HTTP_X_FORWARDED_FOR: 127.0.0.1'",
+        "--header 'Accept-Language: it-IT'",
+        "--header 'Content-Type: application/x-www-form-urlencoded'",
+        "--data-urlencode '='"));
+        BasicCurlParser basicCurlParser = new BasicCurlParser();
+        BasicCurlParser.Request request = basicCurlParser.parse(cmdLine);
+        assertEquals("https://example.invalid/access/token", request.getUrl());
+        assertEquals(3, request.getHeaders().size());
+        assertEquals("", request.getPostData());
+    }
+
+    @Test
+    public void testBug65270DuplicateDataUrlEncodeOptions() {
+        String cmdLine = String.join(" \\\n",
+                Arrays.asList("curl --location --request POST 'http://example.invalid/access/token'",
+                        "--header 'HTTP_X_FORWARDED_FOR: 127.0.0'", "--header 'Accept-Language: it-IT'",
+                        "--header 'Content-Type: application/x-www-form-urlencoded'",
+                        "--data-urlencode 'client_id=someID'", "--data-urlencode 'client_secret=someSecret'",
+                        "--data-urlencode 'grant_type=password'", "--data-urlencode 'username=test'",
+                        "--data-urlencode 'password=Password1234'"));
+        BasicCurlParser basicCurlParser = new BasicCurlParser();
+        BasicCurlParser.Request request = basicCurlParser.parse(cmdLine);
+        assertEquals("http://example.invalid/access/token", request.getUrl());
+        assertEquals(3, request.getHeaders().size());
+        assertEquals(
+                "client_id=someID&client_secret=someSecret&grant_type=password&username=test&password=Password1234",
+                request.getPostData());
+    }
+
+    @Test
     public void testFFParsing() {
         String cmdLine = "curl 'http://jmeter.apache.org/' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:63.0) Gecko/20100101 Firefox/63.0' "
                 + "-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' "
diff --git a/xdocs/changes.xml b/xdocs/changes.xml
index 9d00536..14a6e5d 100644
--- a/xdocs/changes.xml
+++ b/xdocs/changes.xml
@@ -189,6 +189,7 @@ Summary
   <li><pr>658</pr>Improve javadoc. Contributed by Ori Marko (orimarko at gmail.com)</li>
   <li><pr>661</pr>Fix wording in doc. Contributed by BugKing (wangzhen at fit2cloud.com)</li>
   <li><pr>664</pr>Allow whitespace in path. Contributed by Till Neunast (github.com/tilln)</li>
+  <li><bug>65270</bug>POST application/x-www-form-urlencoded cURL code generated from Postman is not imported correctly</li>
 </ul>
 
  <!--  =================== Thanks =================== -->