You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2010/05/11 21:49:39 UTC
svn commit: r943247 - in /httpcomponents/httpclient/trunk/httpclient/src:
main/java/org/apache/http/impl/client/
test/java/org/apache/http/client/protocol/
Author: olegk
Date: Tue May 11 19:49:38 2010
New Revision: 943247
URL: http://svn.apache.org/viewvc?rev=943247&view=rev
Log:
HTTPCLIENT-939: 302 without redirect location should not cause a protocol exception
Modified:
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/AbstractHttpClient.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRedirectStrategy.java
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/protocol/TestRedirects.java
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/AbstractHttpClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/AbstractHttpClient.java?rev=943247&r1=943246&r2=943247&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/AbstractHttpClient.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/AbstractHttpClient.java Tue May 11 19:49:38 2010
@@ -47,6 +47,7 @@ import org.apache.http.HttpEntity;
import org.apache.http.auth.AuthSchemeRegistry;
import org.apache.http.client.AuthenticationHandler;
import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.RedirectHandler;
import org.apache.http.client.RedirectStrategy;
import org.apache.http.client.RequestDirector;
import org.apache.http.client.ResponseHandler;
@@ -153,6 +154,7 @@ import org.apache.http.protocol.Immutabl
* @since 4.0
*/
@ThreadSafe
+@SuppressWarnings("deprecation")
public abstract class AbstractHttpClient implements HttpClient {
private final Log log = LogFactory.getLog(getClass());
@@ -269,7 +271,7 @@ public abstract class AbstractHttpClient
@Deprecated
- protected abstract org.apache.http.client.RedirectHandler createRedirectHandler();
+ protected abstract RedirectHandler createRedirectHandler();
protected abstract AuthenticationHandler createTargetAuthenticationHandler();
@@ -391,7 +393,7 @@ public abstract class AbstractHttpClient
@Deprecated
- public synchronized final org.apache.http.client.RedirectHandler getRedirectHandler() {
+ public synchronized final RedirectHandler getRedirectHandler() {
return createRedirectHandler();
}
@@ -404,10 +406,9 @@ public abstract class AbstractHttpClient
/**
* @since 4.1
*/
- @SuppressWarnings("deprecation")
public synchronized final RedirectStrategy getRedirectStrategy() {
if (redirectStrategy == null) {
- redirectStrategy = new DefaultRedirectStrategyAdaptor(createRedirectHandler());
+ redirectStrategy = new DefaultRedirectStrategy();
}
return redirectStrategy;
}
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRedirectStrategy.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRedirectStrategy.java?rev=943247&r1=943246&r2=943247&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRedirectStrategy.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRedirectStrategy.java Tue May 11 19:49:38 2010
@@ -76,11 +76,14 @@ public class DefaultRedirectStrategy imp
}
int statusCode = response.getStatusLine().getStatusCode();
+ String method = request.getRequestLine().getMethod();
+ Header locationHeader = response.getFirstHeader("location");
switch (statusCode) {
case HttpStatus.SC_MOVED_TEMPORARILY:
+ return (method.equalsIgnoreCase(HttpGet.METHOD_NAME)
+ || method.equalsIgnoreCase(HttpHead.METHOD_NAME)) && locationHeader != null;
case HttpStatus.SC_MOVED_PERMANENTLY:
case HttpStatus.SC_TEMPORARY_REDIRECT:
- String method = request.getRequestLine().getMethod();
return method.equalsIgnoreCase(HttpGet.METHOD_NAME)
|| method.equalsIgnoreCase(HttpHead.METHOD_NAME);
case HttpStatus.SC_SEE_OTHER:
Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/protocol/TestRedirects.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/protocol/TestRedirects.java?rev=943247&r1=943246&r2=943247&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/protocol/TestRedirects.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/protocol/TestRedirects.java Tue May 11 19:49:38 2010
@@ -304,6 +304,44 @@ public class TestRedirects extends Basic
}
@Test
+ public void testBasicRedirect302NoLocation() throws Exception {
+ InetSocketAddress address = this.localServer.getServiceAddress();
+ int port = address.getPort();
+ String host = address.getHostName();
+ this.localServer.register("*", new HttpRequestHandler() {
+
+ public void handle(
+ final HttpRequest request,
+ final HttpResponse response,
+ final HttpContext context) throws HttpException, IOException {
+ response.setStatusCode(HttpStatus.SC_MOVED_TEMPORARILY);
+ }
+
+ });
+
+ DefaultHttpClient client = new DefaultHttpClient();
+ HttpContext context = new BasicHttpContext();
+
+ HttpGet httpget = new HttpGet("/oldlocation/");
+
+ HttpResponse response = client.execute(getServerHttp(), httpget, context);
+ HttpEntity e = response.getEntity();
+ if (e != null) {
+ e.consumeContent();
+ }
+
+ HttpRequest reqWrapper = (HttpRequest) context.getAttribute(
+ ExecutionContext.HTTP_REQUEST);
+ HttpHost targetHost = (HttpHost) context.getAttribute(
+ ExecutionContext.HTTP_TARGET_HOST);
+
+ Assert.assertEquals(HttpStatus.SC_MOVED_TEMPORARILY, response.getStatusLine().getStatusCode());
+ Assert.assertEquals("/oldlocation/", reqWrapper.getRequestLine().getUri());
+ Assert.assertEquals(host, targetHost.getHostName());
+ Assert.assertEquals(port, targetHost.getPort());
+ }
+
+ @Test
public void testBasicRedirect303() throws Exception {
InetSocketAddress address = this.localServer.getServiceAddress();
int port = address.getPort();