You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@jakarta.apache.org by se...@apache.org on 2011/01/29 03:08:33 UTC

svn commit: r1064940 - in /jakarta/jmeter/trunk: docs/images/screenshots/ src/core/org/apache/jmeter/resources/ src/protocol/http/org/apache/jmeter/protocol/http/config/gui/ src/protocol/http/org/apache/jmeter/protocol/http/sampler/ xdocs/ xdocs/images...

Author: sebb
Date: Sat Jan 29 02:08:32 2011
New Revision: 1064940

URL: http://svn.apache.org/viewvc?rev=1064940&view=rev
Log:
Bug 50684 - Optionally disable Content-Type and Transfer-Encoding in Multipart POST

Modified:
    jakarta/jmeter/trunk/docs/images/screenshots/http-request.png
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
    jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/UrlConfigGui.java
    jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java
    jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java
    jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
    jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
    jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/PostWriter.java
    jakarta/jmeter/trunk/xdocs/changes.xml
    jakarta/jmeter/trunk/xdocs/images/screenshots/http-request.png
    jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml

Modified: jakarta/jmeter/trunk/docs/images/screenshots/http-request.png
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/http-request.png?rev=1064940&r1=1064939&r2=1064940&view=diff
==============================================================================
Binary files - no diff available.

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1064940&r1=1064939&r2=1064940&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties Sat Jan 29 02:08:32 2011
@@ -944,7 +944,8 @@ url_full_config_title=UrlFull Sample
 url_multipart_config_title=HTTP Multipart Request Defaults
 use_expires=Use Cache-Control/Expires header when processing GET requests
 use_keepalive=Use KeepAlive
-use_multipart_for_http_post=Use multipart/form-data for HTTP POST
+use_multipart_for_http_post=Use multipart/form-data for POST
+use_multipart_mode_browser=Browser-compatible headers
 use_recording_controller=Use Recording Controller
 user=User
 user_defined_test=User Defined Test

Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/UrlConfigGui.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/UrlConfigGui.java?rev=1064940&r1=1064939&r2=1064940&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/UrlConfigGui.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/config/gui/UrlConfigGui.java Sat Jan 29 02:08:32 2011
@@ -40,7 +40,6 @@ import org.apache.jmeter.protocol.http.g
 import org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase;
 import org.apache.jmeter.protocol.http.sampler.HTTPSamplerFactory;
 import org.apache.jmeter.protocol.http.util.HTTPArgument;
-import org.apache.jmeter.testelement.AbstractTestElement;
 import org.apache.jmeter.testelement.TestElement;
 import org.apache.jmeter.testelement.property.BooleanProperty;
 import org.apache.jmeter.testelement.property.TestElementProperty;
@@ -55,6 +54,7 @@ import org.apache.jorphan.gui.JLabeledCh
  * - redirects & keepalive
  */
 public class UrlConfigGui extends JPanel implements ChangeListener {
+
     private static final long serialVersionUID = 240L;
 
     private HTTPArgumentsPanel argsPanel;
@@ -89,6 +89,8 @@ public class UrlConfigGui extends JPanel
 
     private JCheckBox useMultipartForPost;
 
+    private JCheckBox useBrowserCompatibleMultipartMode;
+
     private JLabeledChoice method;
     
     private JLabeledChoice httpImplementation;
@@ -120,6 +122,7 @@ public class UrlConfigGui extends JPanel
             method.setText(HTTPSamplerBase.DEFAULT_METHOD);
             useKeepAlive.setSelected(true);
             useMultipartForPost.setSelected(false);
+            useBrowserCompatibleMultipartMode.setSelected(HTTPSamplerBase.BROWSER_COMPATIBLE_MULTIPART_MODE_DEFAULT);
         }
         if (showImplementation) {
             httpImplementation.setText(""); // $NON-NLS-1$
@@ -174,6 +177,7 @@ public class UrlConfigGui extends JPanel
             element.setProperty(new BooleanProperty(HTTPSamplerBase.AUTO_REDIRECTS, autoRedirects.isSelected()));
             element.setProperty(new BooleanProperty(HTTPSamplerBase.USE_KEEPALIVE, useKeepAlive.isSelected()));
             element.setProperty(new BooleanProperty(HTTPSamplerBase.DO_MULTIPART_POST, useMultipartForPost.isSelected()));
+            element.setProperty(HTTPSamplerBase.BROWSER_COMPATIBLE_MULTIPART, useBrowserCompatibleMultipartMode.isSelected(),HTTPSamplerBase.BROWSER_COMPATIBLE_MULTIPART_MODE_DEFAULT);
         }
         if (showImplementation) {
             element.setProperty(HTTPSamplerBase.IMPLEMENTATION, httpImplementation.getText(),"");
@@ -210,10 +214,12 @@ public class UrlConfigGui extends JPanel
         path.setText(el.getPropertyAsString(HTTPSamplerBase.PATH));
         if (notConfigOnly){
             method.setText(el.getPropertyAsString(HTTPSamplerBase.METHOD));
-            followRedirects.setSelected(((AbstractTestElement) el).getPropertyAsBoolean(HTTPSamplerBase.FOLLOW_REDIRECTS));
-            autoRedirects.setSelected(((AbstractTestElement) el).getPropertyAsBoolean(HTTPSamplerBase.AUTO_REDIRECTS));
-            useKeepAlive.setSelected(((AbstractTestElement) el).getPropertyAsBoolean(HTTPSamplerBase.USE_KEEPALIVE));
-            useMultipartForPost.setSelected(((AbstractTestElement) el).getPropertyAsBoolean(HTTPSamplerBase.DO_MULTIPART_POST));
+            followRedirects.setSelected(el.getPropertyAsBoolean(HTTPSamplerBase.FOLLOW_REDIRECTS));
+            autoRedirects.setSelected(el.getPropertyAsBoolean(HTTPSamplerBase.AUTO_REDIRECTS));
+            useKeepAlive.setSelected(el.getPropertyAsBoolean(HTTPSamplerBase.USE_KEEPALIVE));
+            useMultipartForPost.setSelected(el.getPropertyAsBoolean(HTTPSamplerBase.DO_MULTIPART_POST));
+            useBrowserCompatibleMultipartMode.setSelected(el.getPropertyAsBoolean(
+                    HTTPSamplerBase.BROWSER_COMPATIBLE_MULTIPART, HTTPSamplerBase.BROWSER_COMPATIBLE_MULTIPART_MODE_DEFAULT));
         }
         if (showImplementation) {
             httpImplementation.setText(el.getPropertyAsString(HTTPSamplerBase.IMPLEMENTATION));
@@ -424,6 +430,10 @@ public class UrlConfigGui extends JPanel
 
             useMultipartForPost = new JCheckBox(JMeterUtils.getResString("use_multipart_for_http_post")); // $NON-NLS-1$
             useMultipartForPost.setSelected(false);
+
+            useBrowserCompatibleMultipartMode = new JCheckBox(JMeterUtils.getResString("use_multipart_mode_browser")); // $NON-NLS-1$
+            useBrowserCompatibleMultipartMode.setSelected(HTTPSamplerBase.BROWSER_COMPATIBLE_MULTIPART_MODE_DEFAULT);
+
         }
 
         JPanel pathPanel = new JPanel(new BorderLayout(5, 0));
@@ -439,7 +449,8 @@ public class UrlConfigGui extends JPanel
             optionPanel.add(autoRedirects);
             optionPanel.add(followRedirects);
             optionPanel.add(useKeepAlive);
-             optionPanel.add(useMultipartForPost);
+            optionPanel.add(useMultipartForPost);
+            optionPanel.add(useBrowserCompatibleMultipartMode);
             optionPanel.setMinimumSize(optionPanel.getPreferredSize());
             panel.add(optionPanel);
         }

Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java?rev=1064940&r1=1064939&r2=1064940&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java Sat Jan 29 02:08:32 2011
@@ -193,6 +193,13 @@ public abstract class HTTPAbstractImpl i
     }
 
     /**
+     * Invokes {@link HTTPSamplerBase#getDoBrowserCompatibleMultipart()}
+     */
+    protected boolean getDoBrowserCompatibleMultipart() {
+        return testElement.getDoBrowserCompatibleMultipart();
+    }
+
+    /**
      * Invokes {@link HTTPSamplerBase#hasArguments()}
      */
     protected boolean hasArguments() {

Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java?rev=1064940&r1=1064939&r2=1064940&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java Sat Jan 29 02:08:32 2011
@@ -670,18 +670,24 @@ public class HTTPHC3Impl extends HTTPHCA
                 contentEncoding = null;
             }
 
+            final boolean browserCompatible = getDoBrowserCompatibleMultipart();
             // We don't know how many entries will be skipped
             ArrayList<PartBase> partlist = new ArrayList<PartBase>();
             // Create the parts
             // Add any parameters
             PropertyIterator args = getArguments().iterator();
             while (args.hasNext()) {
-               HTTPArgument arg = (HTTPArgument) args.next().getObjectValue();
-               String parameterName = arg.getName();
-               if (arg.isSkippable(parameterName)){
-                   continue;
-               }
-               partlist.add(new StringPart(arg.getName(), arg.getValue(), contentEncoding));
+                HTTPArgument arg = (HTTPArgument) args.next().getObjectValue();
+                String parameterName = arg.getName();
+                if (arg.isSkippable(parameterName)){
+                    continue;
+                }
+                StringPart part = new StringPart(arg.getName(), arg.getValue(), contentEncoding);
+                if (browserCompatible) {
+                    part.setTransferEncoding(null);
+                    part.setContentType(null);
+                }
+                partlist.add(part);
             }
 
             // Add any files

Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?rev=1064940&r1=1064939&r2=1064940&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java Sat Jan 29 02:08:32 2011
@@ -62,6 +62,7 @@ import org.apache.http.conn.scheme.Schem
 import org.apache.http.entity.FileEntity;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.entity.mime.FormBodyPart;
+import org.apache.http.entity.mime.HttpMultipartMode;
 import org.apache.http.entity.mime.MultipartEntity;
 import org.apache.http.entity.mime.content.FileBody;
 import org.apache.http.entity.mime.content.StringBody;
@@ -665,7 +666,8 @@ public class HTTPHC4Impl extends HTTPHCA
             }
 
             // Write the request to our own stream
-            MultipartEntity multiPart = new MultipartEntity();
+            MultipartEntity multiPart = new MultipartEntity(
+                    getDoBrowserCompatibleMultipart() ? HttpMultipartMode.BROWSER_COMPATIBLE : HttpMultipartMode.STRICT);
             // Create the parts
             // Add any parameters
             PropertyIterator args = getArguments().iterator();

Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java?rev=1064940&r1=1064939&r2=1064940&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java Sat Jan 29 02:08:32 2011
@@ -133,7 +133,16 @@ public abstract class HTTPSamplerBase ex
      * IP source to use - does not apply to Java HTTP implementation currently
      */
     public static final String IP_SOURCE = "HTTPSampler.ipSource"; // $NON-NLS-1$
+
+    public static final String USE_KEEPALIVE = "HTTPSampler.use_keepalive"; // $NON-NLS-1$
+
+    public static final String DO_MULTIPART_POST = "HTTPSampler.DO_MULTIPART_POST"; // $NON-NLS-1$
+
+    public static final String BROWSER_COMPATIBLE_MULTIPART  = "HTTPSampler.BROWSER_COMPATIBLE_MULTIPART"; // $NON-NLS-1$
+
     //- JMX names
+
+    public static final boolean BROWSER_COMPATIBLE_MULTIPART_MODE_DEFAULT = false; // The default setting to be used (i.e. historic)
     
     
     public static final String DEFAULT_METHOD = GET; // $NON-NLS-1$
@@ -150,11 +159,6 @@ public abstract class HTTPSamplerBase ex
 
     private static final List<String> METHODLIST = Collections.unmodifiableList(Arrays.asList(METHODS));
 
-
-    public static final String USE_KEEPALIVE = "HTTPSampler.use_keepalive"; // $NON-NLS-1$
-
-    public static final String DO_MULTIPART_POST = "HTTPSampler.DO_MULTIPART_POST"; // $NON-NLS-1$
-
     // @see mergeFileProperties
     // Must be private, as the file list needs special handling
     private final static String FILE_ARGS = "HTTPsampler.Files"; // $NON-NLS-1$
@@ -246,6 +250,7 @@ public abstract class HTTPSamplerBase ex
     private boolean dynamicPath = false;// Set false if spaces are already encoded
 
 
+
     ////////////////////// Code ///////////////////////////
 
     public HTTPSamplerBase() {
@@ -413,6 +418,14 @@ public abstract class HTTPSamplerBase ex
         return getPropertyAsBoolean(DO_MULTIPART_POST, false);
     }
 
+    public void setDoBrowserCompatibleMultipart(boolean value) {
+        setProperty(BROWSER_COMPATIBLE_MULTIPART, value, BROWSER_COMPATIBLE_MULTIPART_MODE_DEFAULT);
+    }
+
+    public boolean getDoBrowserCompatibleMultipart() {
+        return getPropertyAsBoolean(BROWSER_COMPATIBLE_MULTIPART, BROWSER_COMPATIBLE_MULTIPART_MODE_DEFAULT);
+    }
+
     public void setMonitor(String value) {
         this.setProperty(MONITOR, value);
     }

Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/PostWriter.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/PostWriter.java?rev=1064940&r1=1064939&r2=1064940&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/PostWriter.java (original)
+++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/PostWriter.java Sat Jan 29 02:08:32 2011
@@ -194,7 +194,7 @@ public class PostWriter {
                 // End the previous multipart
                 bos.write(CRLF);
                 // Write multipart for parameter
-                writeFormMultipart(bos, parameterName, arg.getValue(), contentEncoding);
+                writeFormMultipart(bos, parameterName, arg.getValue(), contentEncoding, sampler.getDoBrowserCompatibleMultipart());
             }
             // If there are any files, we need to end the previous multipart
             if(files.length > 0) {
@@ -418,12 +418,14 @@ public class PostWriter {
     /**
      * Writes form data in multipart format.
      */
-    private void writeFormMultipart(OutputStream out, String name, String value, String charSet)
+    private void writeFormMultipart(OutputStream out, String name, String value, String charSet, 
+            boolean browserCompatibleMultipart)
         throws IOException {
         writeln(out, "Content-Disposition: form-data; name=\"" + name + "\""); // $NON-NLS-1$ // $NON-NLS-2$
-        writeln(out, "Content-Type: text/plain; charset=" + charSet); // $NON-NLS-1$
-        writeln(out, "Content-Transfer-Encoding: 8bit"); // $NON-NLS-1$
-
+        if (!browserCompatibleMultipart){
+            writeln(out, "Content-Type: text/plain; charset=" + charSet); // $NON-NLS-1$
+            writeln(out, "Content-Transfer-Encoding: 8bit"); // $NON-NLS-1$
+        }
         out.write(CRLF);
         out.write(value.getBytes(charSet));
         out.write(CRLF);

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1064940&r1=1064939&r2=1064940&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Sat Jan 29 02:08:32 2011
@@ -143,6 +143,7 @@ Fixed RMI startup to provide location of
 <ul>
 <li>AJP Sampler now implements Interruptible</li>
 <li>Allow HTTP implementation to be selected at run-time</li>
+<li>Bug 50684 - Optionally disable Content-Type and Transfer-Encoding in Multipart POST</li>
 </ul>
 
 <h3>Other samplers</h3>

Modified: jakarta/jmeter/trunk/xdocs/images/screenshots/http-request.png
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/http-request.png?rev=1064940&r1=1064939&r2=1064940&view=diff
==============================================================================
Binary files - no diff available.

Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1064940&r1=1064939&r2=1064940&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Sat Jan 29 02:08:32 2011
@@ -81,7 +81,7 @@ Latency is set to the time it takes to l
 
 </component>
 
-<component name="HTTP Request" index="&sect-num;.1.2"  width="826" height="677" screenshot="http-request.png">
+<component name="HTTP Request" index="&sect-num;.1.2"  width="851" height="661" screenshot="http-request.png">
 
 <description>
         <p>This sampler lets you send an HTTP/HTTPS request to a web server.  It
@@ -214,6 +214,10 @@ https.default.protocol=SSLv3
         <property name="Use multipart/form-data for HTTP POST" required="Yes">
         Use a multipart/form-data or application/x-www-form-urlencoded post request
         </property>
+        <property name="Browser-compatible headers" required="Yes">
+        When using multipart/form-data, this suppresses the Content-Type and 
+        Content-Transfer-Encoding headers; only the Content-Disposition header is sent.
+        </property>
         <property name="Path" required="Yes">The path to resource (for example, /servlets/myServlet). If the
 resource requires query string parameters, add them below in the
 "Send Parameters With the Request" section.



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@jakarta.apache.org
For additional commands, e-mail: notifications-help@jakarta.apache.org