### Eclipse Workspace Patch 1.0 #P fluent-hc Index: src/test/java/org/apache/http/client/fluent/TestFluent.java =================================================================== --- src/test/java/org/apache/http/client/fluent/TestFluent.java (revision 1576867) +++ src/test/java/org/apache/http/client/fluent/TestFluent.java (working copy) @@ -33,6 +33,7 @@ import org.apache.http.HttpEntity; import org.apache.http.HttpEntityEnclosingRequest; import org.apache.http.HttpException; +import org.apache.http.HttpHost; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; @@ -147,4 +148,20 @@ } } + @Test + public void testParseProxy() { + Assert.assertEquals(null, Request.parseProxy(null)); + Assert.assertEquals(null, Request.parseProxy("")); + Assert.assertEquals(null, Request.parseProxy(" ")); + + // IPv4 + Assert.assertEquals(new HttpHost("localhost"), Request.parseProxy("localhost")); + Assert.assertEquals(new HttpHost("localhost", 8080), Request.parseProxy("localhost:8080")); + + // IPv6 + Assert.assertEquals(new HttpHost("::"), Request.parseProxy("::")); + Assert.assertEquals(new HttpHost("2001:db8::1"), Request.parseProxy("2001:db8::1")); + Assert.assertEquals(new HttpHost("[1fff:0:1fff:1fff::1fff]", 8080), Request.parseProxy("[1fff:0:1fff:1fff::1fff]:8080")); + } + } Index: src/main/java/org/apache/http/client/fluent/Request.java =================================================================== --- src/main/java/org/apache/http/client/fluent/Request.java (revision 1576867) +++ src/main/java/org/apache/http/client/fluent/Request.java (working copy) @@ -58,6 +58,7 @@ import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.entity.ContentType; import org.apache.http.protocol.HTTP; +import org.apache.http.util.TextUtils; public class Request { @@ -289,6 +290,11 @@ return this; } + public Request viaProxy(final String proxy) { + this.configBuilder.setProxy(parseProxy(proxy)); + return this; + } + //// HTTP entity operations public Request body(final HttpEntity entity) { @@ -364,4 +370,42 @@ return this.request.getRequestLine().toString(); } + /** + * Parse the proxy as an HttpHost with localhost:port. It is both compatible + * with IPv4 and IPv6. + * + * @param proxy + * the proxy in the format hostname:port + * + * @return the proxy as an HttpHost with localhost and port + */ + protected static HttpHost parseProxy(String proxy) { + if (TextUtils.isBlank(proxy)) { + return null; + } + + proxy = proxy.trim(); + + // IPv6 + final int i = proxy.indexOf("]"); + if (i != -1) { + // parse format [1fff:0:1fff:1fff::1fff]:8080 + final String host = proxy.substring(0, i + 1); + final int port = Integer.valueOf(proxy.substring(i + 2)); + return new HttpHost(host, port); + } + + // IPv4 + final String[] parts = proxy.split(":"); + if (parts.length == 2) { + // parse format localhost:8080 + final String host = parts[0]; + final int port = Integer.valueOf(parts[1]); + return new HttpHost(host, port); + } + + // default case: proxy without port + return new HttpHost(proxy); + } + }