Author: johnh
Date: Mon Feb 1 21:01:14 2010
New Revision: 905412
URL: http://svn.apache.org/viewvc?rev=905412&view=rev
Log:
Handle relative redirection in BasicHttpFetcher.
Thanks to Ziv Horesh for the patch.
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java?rev=905412&r1=905411&r2=905412&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java
Mon Feb 1 21:01:14 2010
@@ -33,6 +33,7 @@
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.io.output.ByteArrayOutputStream;
+import org.apache.shindig.common.uri.Uri;
import com.google.common.collect.Maps;
import com.google.inject.Inject;
@@ -247,6 +248,9 @@
if ((redirectUri == null) || (redirectUri.equals(""))) {
redirectUri = "/";
}
+ // Url can be relative to original:
+ redirectUri =
request.getUri().resolve(Uri.parse(redirectUri)).toString();
+
httpMethod.releaseConnection();
httpMethod = new GetMethod(redirectUri);
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java?rev=905412&r1=905411&r2=905412&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java
Mon Feb 1 21:01:14 2010
@@ -186,7 +186,20 @@
assertEquals(200, response.getHttpStatusCode());
assertEquals("redirected", response.getResponseAsString());
}
-
+
+ @Test public void testFollowRelativeRedirects() throws Exception {
+ String content = "";
+ Uri uri = new UriBuilder(BASE_URL)
+ .addQueryParameter("body", content)
+ .addQueryParameter("status", "302")
+ .addQueryParameter("header", "Location=/?body=redirected")
+ .toUri();
+ HttpRequest request = new HttpRequest(uri);
+ HttpResponse response = fetcher.fetch(request);
+ assertEquals(200, response.getHttpStatusCode());
+ assertEquals("redirected", response.getResponseAsString());
+ }
+
@Test public void testNoFollowRedirects() throws Exception {
String content = "";
Uri uri = new UriBuilder(BASE_URL)