So it can either be set as jvm arguments like
-DproxySet=true -Dhttp.proxyHost=proxyIP -DproxyPort=port
or set them in the code using System.setProperty()
However since this is a system property, it gets set on the VM itself and hence it is not dynamic. In ColdFusion, since tags like 'cfhttp' keep them dynamic, I wanted a similar behaviour. After looking around for a while, I noticed that this capability was added in Java 1.5 aka Tiger release. (Is it only me? I keep hitting things which I feel is lacking in java API and then I find them added in 1.5 :) )
In Java 1.5, you can use
URLConnection conn = url.openConnection(proxy); // added in 1.5
where proxy is an object of java.net.Proxy. Pretty neat.
However this was not a solution for me as we are still developing on JDK1.4 (need to consider all the application servers that we have to support). I stumbled upon an interesting article by Daniel Horn who faced the exact same problem. And guess what he did? Since you send an HTTP request to the proxy and then proxy sends out the actual request, he created the URL object by passing proxyHost and proxyPort as IP and port and then he gave the target url string as 'file' argument. This is what he did.
String actualUrl = "http://www.adobe.com";
URL url = new URL("http", proxyHost, proxyPort, actualUrl);
URLConnection conn = url.openConnection();
And it works ! Brilliant !! I wonder why this is not documented in the java API.