Pregunta

necesito para configurar la autenticación de proxy contra un proxy SOCKS. Descubrí este post dar instrucciones que aparecen para trabajar con servidores proxy HTTP común.

        httpclient.getHostConfiguration().setProxy("proxyserver.example.com", 8080);

        HttpState state = new HttpState();
        state.setProxyCredentials(new AuthScope("proxyserver.example.com", 8080), 
           new UsernamePasswordCredentials("username", "password"));
        httpclient.setState(state);

¿Eso funcionaría con Calcetines proxies tan bien o qué tengo que hacer algo diferente?

¿Fue útil?

Solución

página de Apache HTTPClient dice:

  

conexiones transparente a través de proxies SOCKS (versión 4 y 5) usando soporte socket nativo Java.

Con "transparente", supongo que significa que funciona sin que tenga que hacer nada especial. ¿Tiene un proxy SOCKS algún lugar disponible? ¿No puedes probarlo para ver si funciona?

Otros consejos

soportes Java Calcetines configuración de proxy mediante las preferencias de:

  • socksProxyHost para el nombre de host del servidor proxy SOCKS
  • socksProxyPort para el número de puerto, que es el valor por defecto 1080

por ejemplo.

java -DsocksProxyHost=socks.mydomain.com

( editar ) Para su ejemplo, si el proxy calcetines se ha configurado en la forma esbozó antes:

httpclient.getHostConfiguration().setProxy("proxyserver.example.com", 8080);
Credentials cred = new UsernamePasswordCredentials("username","password");
httpclient.getState().setProxyCredentials(AuthScope.ANY, cred); 

También puede utilizar esta variante (sin httpclient):

SocketAddress addr = new
InetSocketAddress("webcache.mydomain.com", 8080);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); // Type.HTTP for HTTP

Así completar el ejemplo anterior, ahora podemos añadir:

URL url = new URL("http://java.sun.com/");
URConnection conn = url.openConnection(proxy);

HTH

calcetines no está soportado por HttpClient 3 nativa. Puede probar los calcetines apoyan en el JDK como se sugiere por otros. El efecto secundario es que toda la JVM pasará a través de los mismos calcetines proxy.

Java 5 soporta nombre de usuario / contraseña de autenticación en calcetines (tipo 2). Todo lo que tiene que hacer es configurar el autenticador como este,

Authenticator.setDefault(new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password.toCharArray());
    }
});

Una vez más, esto puede no funcionar para usted, ya que afecta a toda la autenticación en la JVM (HTTP auth, proxy de autenticación).

Se puede proporcionar una fábrica de sockets costumbre que implementa el protocolo SOCKS, y registrarlo como predeterminado controlador de protocolo HTTP. Esta solución tiene una limitación similar a la respuesta de tuergeist anteriormente tiene - se aplica de forma general, a cualquier conexión HTTP usted establecerá a través HttpClient.

Si encuentra este problema, echar un vistazo a este correspondencia, donde Oleg sugiere el uso de HttpClient 4,0, pero también se refiere a un posible parche en la clase HostConfiguration para HttpClient 3.x.

Otra solución posible, que es mi favorito, es escribir un proxy HTTP envoltorio al proxy calcetines.

He intentado

System.setProperty("socksProxyHost", "socks.xyz.com");
System.setProperty("socksProxyPort", "1000");

y está funcionando bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top