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="§-num;.1.2" width="826" height="677" screenshot="http-request.png">
+<component name="HTTP Request" index="§-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