Java Proxy

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);
}
Java Proxy