Pergunta

Estou procurando uma classe de cliente de proxy de meias Java que suporta auteticação, alguma sugestão? O java.net.proxy não suporta autenticação.

EDIT: Não consigo encontrar uma maneira de anexar dados de autenticação a um host de proxy específico via soquete. Autenticator.setDefault () permite apenas um conjunto de credenciais.

 Authenticator.setDefault(new Authenticator(){
  protected  PasswordAuthentication  getPasswordAuthentication(){
   PasswordAuthentication p=new PasswordAuthentication("xxx", "xxx".toCharArray());
   return p;
  }
 });
 Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("xxx.xx.xxx.xxx", xxx));

   Socket sock = new Socket(proxy);

   sock.connect(new InetSocketAddress(server,xx));
Foi útil?

Solução

Java suporta a configuração de proxy de meias por meio de um registrado java.net.Authenticator ou através de preferências, conforme documentado no Propriedades de rede:

Configurações de suporte do protocolo de meias

O nome de usuário e a senha meias são adquiridos da seguinte maneira. Primeiro, se o aplicativo registrou um java.net.Authenticator Instância padrão, então isso será consultado com o protocolo definido para a string "Socks5" e o prompt definido para a string "Autenticação de meias". Se o autenticador não retornar um nome de usuário/senha ou se nenhum autenticador estiver registrado, o sistema verifica as preferências do usuário "java.net.socks.username" e "java.net.socks.password". Se essas preferências não existem, então a propriedade do sistema"user.name"É verificado como um nome de usuário. Nesse caso, nenhuma senha é fornecida.

SocksproxyHost
SocksProxyport (Padrão: 1080)
Indica o nome do servidor proxy de meias e o número da porta que será usado pela camada de protocolo de meias. Se o SocksProxyHost for especificado, todos os soquetes TCP usarão o servidor proxy de meias para estabelecer uma conexão ou aceitar um. O servidor proxy de meias pode ser um servidor Socks V4 ou V5 e deve permitir conexões não autenticadas.

Para exemplos de código do cliente, você pode verificar esta resposta no transbordamento da pilha.

Editar: Atualização da resposta conforme comentário

O efeito colateral do suporte de meias no JDK é que toda a sua JVM passará pelo mesmo proxy de meias. Portanto, isso pode não funcionar para você.

o Authenticator Afeta toda a autenticação em sua JVM (HTTP Auth, Proxy Auth). Então, novamente, isso pode não funcionar para você.

No seu caso, uma possível solução seria usar HttpClient a partir de Httpcomponents (o sucessor do legado Cliente HTTP Commons 3.x). Confira o amostras e especialmente o Solicitação por meio de um proxy e Autenticação de proxy exemplos.

Outras dicas

Use este httpclient (não o Apache's),

http://www.innovation.ch/java/httpclient/

Este é simplesmente um manipulador de URL para que você possa usar o HttpurlConnection usual. Ele suporta meias e outro proxy.

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