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)


Reply via email to