You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by se...@apache.org on 2014/03/17 01:46:21 UTC
svn commit: r1578188 - in /jmeter/trunk:
src/protocol/http/org/apache/jmeter/protocol/http/sampler/ xdocs/
Author: sebb
Date: Mon Mar 17 00:46:21 2014
New Revision: 1578188
URL: http://svn.apache.org/r1578188
Log:
Move redirect location processing from HC3/HC4 samplers to HTTPSamplerBase#followRedirects()
Bugzilla Id: 56231
Modified:
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
jmeter/trunk/xdocs/changes.xml
Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java?rev=1578188&r1=1578187&r2=1578188&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java Mon Mar 17 00:46:21 2014
@@ -69,7 +69,6 @@ import org.apache.jmeter.protocol.http.c
import org.apache.jmeter.protocol.http.control.CacheManager;
import org.apache.jmeter.protocol.http.control.CookieManager;
import org.apache.jmeter.protocol.http.control.HeaderManager;
-import org.apache.jmeter.protocol.http.util.ConversionUtils;
import org.apache.jmeter.protocol.http.util.EncoderCache;
import org.apache.jmeter.protocol.http.util.HTTPArgument;
import org.apache.jmeter.protocol.http.util.HTTPConstants;
@@ -95,8 +94,6 @@ public class HTTPHC3Impl extends HTTPHCA
/** retry count to be used (default 1); 0 = disable retries */
private static final int RETRY_COUNT = JMeterUtils.getPropDefault("httpclient3.retrycount", 0);
- private static final boolean STRICT_RFC_2616 = JMeterUtils.getPropDefault("jmeter.httpclient.strict_rfc2616", false);
-
private static final String HTTP_AUTHENTICATION_PREEMPTIVE = "http.authentication.preemptive"; // $NON-NLS-1$
private static final boolean canSetPreEmptive; // OK to set pre-emptive auth?
@@ -194,8 +191,10 @@ public class HTTPHC3Impl extends HTTPHCA
String urlStr = url.toString();
- log.debug("Start : sample " + urlStr);
- log.debug("method " + method);
+ if (log.isDebugEnabled()) {
+ log.debug("Start : sample " + urlStr);
+ log.debug("method " + method+ " followingRedirect " + areFollowingRedirect + " depth " + frameDepth);
+ }
HttpMethodBase httpMethod = null;
@@ -322,17 +321,8 @@ public class HTTPHC3Impl extends HTTPHCA
if (headerLocation == null) { // HTTP protocol violation, but avoids NPE
throw new IllegalArgumentException("Missing location header");
}
- try {
- String redirectLocation = headerLocation.getValue();
- if(!STRICT_RFC_2616 && !(redirectLocation.startsWith("http://")||redirectLocation.startsWith("https://"))) {
- redirectLocation = ConversionUtils.buildFullUrlFromRelative(url, redirectLocation);
- }
- res.setRedirectLocation(redirectLocation); // in case sanitising fails
- final URL redirectUrl = new URL(redirectLocation);
- res.setRedirectLocation(ConversionUtils.sanitizeUrl(redirectUrl).toString());
- } catch (Exception e) {
- log.error("Error sanitizing URL:"+headerLocation.getValue()+", message:"+e.getMessage());
- }
+ String redirectLocation = headerLocation.getValue();
+ res.setRedirectLocation(redirectLocation); // in case sanitising fails
}
// record some sizes to allow HTTPSampleResult.getBytes() with different options
Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?rev=1578188&r1=1578187&r2=1578188&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java Mon Mar 17 00:46:21 2014
@@ -104,7 +104,6 @@ import org.apache.jmeter.protocol.http.c
import org.apache.jmeter.protocol.http.control.CacheManager;
import org.apache.jmeter.protocol.http.control.CookieManager;
import org.apache.jmeter.protocol.http.control.HeaderManager;
-import org.apache.jmeter.protocol.http.util.ConversionUtils;
import org.apache.jmeter.protocol.http.util.EncoderCache;
import org.apache.jmeter.protocol.http.util.HC4TrustAllSSLSocketFactory;
import org.apache.jmeter.protocol.http.util.HTTPArgument;
@@ -129,8 +128,6 @@ public class HTTPHC4Impl extends HTTPHCA
private static final Logger log = LoggingManager.getLoggerForClass();
- private static final boolean STRICT_RFC_2616 = JMeterUtils.getPropDefault("jmeter.httpclient.strict_rfc2616", false);
-
/** retry count to be used (default 0); 0 = disable retries */
private static final int RETRY_COUNT = JMeterUtils.getPropDefault("httpclient4.retrycount", 0);
@@ -267,6 +264,11 @@ public class HTTPHC4Impl extends HTTPHCA
protected HTTPSampleResult sample(URL url, String method,
boolean areFollowingRedirect, int frameDepth) {
+ if (log.isDebugEnabled()) {
+ log.debug("Start : sample " + url.toString());
+ log.debug("method " + method+ " followingRedirect " + areFollowingRedirect + " depth " + frameDepth);
+ }
+
HTTPSampleResult res = createSampleResult(url, method);
HttpClient httpClient = setupClient(url);
@@ -360,17 +362,7 @@ public class HTTPHC4Impl extends HTTPHCA
throw new IllegalArgumentException("Missing location header in redirect for " + httpRequest.getRequestLine());
}
String redirectLocation = headerLocation.getValue();
- if(!STRICT_RFC_2616 && !(redirectLocation.startsWith("http://")|| redirectLocation.startsWith("https://"))) {
- redirectLocation = ConversionUtils.buildFullUrlFromRelative(url, redirectLocation);
- }
- try {
- res.setRedirectLocation(redirectLocation); // in case sanitising fails
- final URL redirectUrl = new URL(redirectLocation);
- res.setRedirectLocation(ConversionUtils.sanitizeUrl(redirectUrl).toString());
- } catch (Exception e) {
- log.error("Error in redirect URL for " + httpRequest.getRequestLine()
- +"\n\tCould not sanitize URL: " + redirectLocation + "\n\t", e);
- }
+ res.setRedirectLocation(redirectLocation);
}
// record some sizes to allow HTTPSampleResult.getBytes() with different options
Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java?rev=1578188&r1=1578187&r2=1578188&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java Mon Mar 17 00:46:21 2014
@@ -22,6 +22,7 @@ import java.io.InputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
+import java.net.URISyntaxException;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@@ -1024,7 +1025,11 @@ public abstract class HTTPSamplerBase ex
*/
public void parseArguments(String queryString, String contentEncoding) {
String[] args = JOrphanUtils.split(queryString, QRY_SEP);
+ final boolean isDebug = log.isDebugEnabled();
for (int i = 0; i < args.length; i++) {
+ if (isDebug) {
+ log.debug("Arg: " + args[i]);
+ }
// need to handle four cases:
// - string contains name=value
// - string contains name=
@@ -1047,6 +1052,9 @@ public abstract class HTTPSamplerBase ex
value="";
}
if (name.length() > 0) {
+ if (isDebug) {
+ log.debug("Name: " + name+ " Value: " + value+ " Metadata: " + metaData);
+ }
// If we know the encoding, we can decode the argument value,
// to make it easier to read for the user
if(!StringUtils.isEmpty(contentEncoding)) {
@@ -1414,7 +1422,8 @@ public abstract class HTTPSamplerBase ex
method = HTTPConstants.GET;
}
try {
- final URL url = ConversionUtils.makeRelativeURL(lastRes.getURL(), location);
+ URL url = ConversionUtils.makeRelativeURL(lastRes.getURL(), location);
+ url = ConversionUtils.sanitizeUrl(url).toURL();
if (log.isDebugEnabled()) {
log.debug("Location as URL: " + url.toString());
}
@@ -1423,6 +1432,10 @@ public abstract class HTTPSamplerBase ex
errorResult(e, lastRes);
// The redirect URL we got was not a valid URL
invalidRedirectUrl = true;
+ } catch (URISyntaxException e) {
+ errorResult(e, lastRes);
+ // The redirect URL we got was not a valid URL
+ invalidRedirectUrl = true;
}
if (lastRes.getSubResults() != null && lastRes.getSubResults().length > 0) {
SampleResult[] subs = lastRes.getSubResults();
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1578188&r1=1578187&r2=1578188&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml (original)
+++ jmeter/trunk/xdocs/changes.xml Mon Mar 17 00:46:21 2014
@@ -126,6 +126,7 @@ A workaround is to use a Java 7 update 4
<li><bugzilla>56178</bugzilla> - keytool error: Invalid escaped character in AVA: - some characters must be escaped</li>
<li><bugzilla>56222</bugzilla> - NPE if jmeter.httpclient.strict_rfc2616=true and location is not absolute</li>
<li><bugzilla>56263</bugzilla> - DefaultSamplerCreator should set BrowserCompatible Multipart true</li>
+<li><bugzilla>56231</bugzilla> - Move redirect location processing from HC3/HC4 samplers to HTTPSamplerBase#followRedirects()</li>
</ul>
<h3>Other Samplers</h3>