Pergunta

Preciso configurar a autenticação de proxy contra um proxy de meias. eu descobri esta postagem Dando instruções que parecem funcionar com proxies HTTP comuns.

        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);

Isso funcionaria com MEIAS Proxies também ou eu tenho que fazer algo diferente?

Foi útil?

Solução

o Página de recursos de Apache HttpClient diz:

Conexões transparentes através de proxies de meias (versão 4 e 5) usando suporte ao soquete Java nativo.

Com "transparente", acho que eles significam que funciona sem você precisar fazer nada de especial. Você tem um proxy de meias disponíveis em algum lugar? Você não pode simplesmente experimentar para ver se funciona?

Outras dicas

Java suporta a configuração de proxy de meias por meio de preferências:

  • socksProxyHost Para o nome do host do servidor proxy de meias
  • socksProxyPort Para o número da porta, sendo o valor padrão 1080

por exemplo

java -DsocksProxyHost=socks.mydomain.com

(editar) Para o seu exemplo, se o proxy das meias foi configurado da maneira descrita antes:

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

Você também pode usar esta variante (sem httpclient):

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

Então, completando o exemplo anterior, agora podemos adicionar:

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

Hth

As meias não são suportadas pelo HTTPClient 3 nativamente. Você pode experimentar o suporte de meias no JDK, conforme sugerido por outros. O efeito colateral é que toda a sua JVM passará pelo mesmo proxy de meias.

O Java 5 suporta autenticação de nome de usuário/senha em meias (tipo 2). Tudo o que você precisa fazer é configurar o autenticador como este,

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

Novamente, isso pode não funcionar para você, porque afeta toda a autenticação em sua JVM (HTTP Auth, Proxy Auth).

Você pode fornecer uma fábrica de soquete personalizada que implementa o protocolo de meias e registrá -lo como seu manipulador de protocolo HTTP padrão. Esta solução tem uma limitação semelhante à resposta de Tuergeist acima - Aplica -se globalmente, a qualquer conexão HTTP que você estabelecerá através do HTTPClient.

Se você achar isso um problema, dê uma olhada esta correspondência, onde OLEG sugere o uso do HTTPClient 4.0, mas também se refere a um possível patch na classe HostConfiguration for HttpClient 3.x.

Outra solução possível, que é minha favorita, é escrever um proxy HTTP do wrapper no proxy de meias.

eu tentei

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

E está funcionando bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top