Sacado de esta pagina.
Para salir a internet mediante un proxy con Java tienes las siguientes opciones:
HTTP
En la llamada a la JVM, al invocar la clase:
$ java -Dhttp.proxyHost=webcache.mydomain.com MiClaseConMetodoMain $ java -Dhttp.proxyHost=webcache.mydomain.com -Dhttp.proxyPort=8080 MiClaseConMetodoMain $ java -Dhttp.proxyHost=webcache.mydomain.com -Dhttp.proxyPort=8080-Dhttp.noProxyHosts=”localhost|host.mydomain.com” MiClaseConMetodoMain
En el codigo de la clase:
System.setProperty("http.proxyHost", "webcache.mydomain.com"); System.setPropery("http.proxyPort", "8080"); // Next connection will be through proxy. URL url = new URL("http://java.sun.com/"); InputStream in = url.openStream(); // Now, let's 'unset' the proxy. System.setProperty("http.proxyHost", null); // From now on http connections will be done directly.
HTTPS
htttps.proxyHost https.proxyPort http.nonProxyHosts
FTP
ftp.proxHost ftp.proxyPort ftp.nonProxyHosts
Configurando mas de un proxy:
$ java -Dhttp.proxyHost=webcache.mydomain.com -Dhttp.proxyPort=8080 -Dftp.proxyHost=webcache.mydomain.com -Dftp.proxyPort=8080 MiClaseConMetodoMain
SOCKS
socksProxyHost socksProxyPort (default 1080)
Si defines un proxy HTTP y uno SOCKS,
- tiene preferencia el HTTP.
- El proxy SOCKS sera ignorado, para conexiones HTTP y SOCKS
- Una conexion FTP, en esta configuracion, iria por SOCKS.
LA CLASE: java.net.Proxy
//creamos proxy HTTP SocketAddress addr = new InetSocketAddress("webcache.mydomain.com", 8080); Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); // lo invocamos URL url = new URL("http://java.sun.com/"); URConnection conn = url.openConnection(proxy); // no queremos invocarlo URL url2 = new URL("http://infos.mydomain.com/"); URLConnection conn2 = url2.openConnection(Proxy.NO_PROXY); //creamos proxy SOCK SocketAddress addr = new InetSocketAddress("socks.mydomain.com", 1080); Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); // lo invocamos URL url = new URL("ftp://ftp.gnu.org/README"); URLConnection conn = url.openConnection(proxy); // Invocacion especifica de proxy para una conexion Socket Socket socket = new Socket(proxy); InetSocketAddress dest = new InetSocketAddress("server.foo.com", 1234); socket.connect(dest); // no queremos invocarlo Socket socket = new Socket(Proxy.NO_PROXY); socket.connect(new InetAddress("localhost", 1234));
LA CLASE: java.net.ProxySelector
Determina para que conexiones usar un proxy u otro
public abstract class ProxySelector { public static ProxySelector getDefault(); public static void setDefault(ProxySelector ps); public abstract List<Proxy> select(URI uri); public abstract void connectFailed(URI uri, SocketAddress sa, IOException ioe); }