HTTPCLIENT-929: Request with two forward slashes for path fails

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@930558 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Oleg Kalnichevski 2010-04-03 18:16:40 +00:00
parent c1c6ba636a
commit ba748bf20c
2 changed files with 58 additions and 2 deletions

View File

@ -134,7 +134,7 @@ public class URIUtils {
target.getSchemeName(),
target.getHostName(),
target.getPort(),
uri.getRawPath(),
normalizePath(uri.getRawPath()),
uri.getRawQuery(),
dropFragment ? null : uri.getRawFragment());
} else {
@ -142,12 +142,33 @@ public class URIUtils {
null,
null,
-1,
uri.getRawPath(),
normalizePath(uri.getRawPath()),
uri.getRawQuery(),
dropFragment ? null : uri.getRawFragment());
}
}
private static String normalizePath(final String path) {
if (path == null) {
return null;
}
StringBuilder buffer = new StringBuilder(path.length());
boolean gotslash = false;
for (int i = 0; i < path.length(); i++) {
char ch = path.charAt(i);
if (ch == '/') {
if (!gotslash) {
buffer.append(ch);
gotslash = true;
}
} else {
buffer.append(ch);
gotslash = false;
}
}
return buffer.toString();
}
/**
* A convenience method for
* {@link URIUtils#rewriteURI(URI, HttpHost, boolean)} that always keeps the

View File

@ -27,6 +27,8 @@ package org.apache.http.client.utils;
import java.net.URI;
import org.apache.http.HttpHost;
import junit.framework.Assert;
import junit.framework.Test;
import junit.framework.TestCase;
@ -53,6 +55,39 @@ public class TestURIUtils extends TestCase {
return new TestSuite(TestURIUtils.class);
}
public void testRewite00() throws Exception {
URI uri = URI.create("http://thishost/stuff");
HttpHost target = new HttpHost("thathost", -1);
Assert.assertEquals("http://thathost/stuff", URIUtils.rewriteURI(uri, target).toString());
}
public void testRewite01() throws Exception {
URI uri = URI.create("http://thishost/stuff");
Assert.assertEquals("/stuff", URIUtils.rewriteURI(uri, null).toString());
}
public void testRewite02() throws Exception {
URI uri = URI.create("http://thishost//");
Assert.assertEquals("/", URIUtils.rewriteURI(uri, null).toString());
}
public void testRewite03() throws Exception {
URI uri = URI.create("http://thishost//stuff///morestuff");
Assert.assertEquals("/stuff/morestuff", URIUtils.rewriteURI(uri, null).toString());
}
public void testRewite04() throws Exception {
URI uri = URI.create("http://thishost/stuff#crap");
HttpHost target = new HttpHost("thathost", -1);
Assert.assertEquals("http://thathost/stuff", URIUtils.rewriteURI(uri, target, true).toString());
}
public void testRewite05() throws Exception {
URI uri = URI.create("http://thishost/stuff#crap");
HttpHost target = new HttpHost("thathost", -1);
Assert.assertEquals("http://thathost/stuff#crap", URIUtils.rewriteURI(uri, target, false).toString());
}
public void testResolve00() {
Assert.assertEquals("g:h", URIUtils.resolve(this.baseURI, "g:h").toString());
}