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)