Como faço para conectar-me a uma URL remota em Java que requer autenticação. Estou tentando encontrar uma maneira de modificar o código a seguir para poder fornecer programaticamente um nome de usuário / senha para que ele não ative um 401.
URL url = new URL(String.format("http://%s/manager/list", _host + ":8080"));
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
java
httpurlconnection
user14128
fonte
fonte
Respostas:
Você pode definir o autenticador padrão para solicitações http como esta:
Além disso, se você precisar de mais flexibilidade, consulte o Apache HttpClient , que oferece mais opções de autenticação (além de suporte à sessão, etc.)
fonte
Authenticator
porURL.openConnection()
chamada específica em vez de defini-la globalmente?HttpURLConnection.setAuthenticator()
. Infelizmente no Java 8 e versões anteriores, a instância do Authenticator é uma variável global da JVM. Veja: docs.oracle.com/javase/9/docs/api/java/net/…Existe uma alternativa nativa e menos invasiva, que funciona apenas para sua ligação.
fonte
.trim()
o resultado ou chame uma variante de método que não produza saída em pedaços.javax.xml.bind.DatatypeConverter
parece mais seguro.Você também pode usar o seguinte, que não requer o uso de pacotes externos:
fonte
--add-modules javax.xml.bind
remover o pacote do caminho de classe padrão. E no Java11 + ele é completamente removido, você precisa de uma dependência externa novamente. Tal é o progresso!java.util.Base64
agora por isso é progredir na verdade :)Se você estiver usando o login normal enquanto digita o nome de usuário e a senha entre o protocolo e o domínio, isso é mais simples. Também funciona com e sem login.
URL de amostra: http: // usuário: [email protected]/url
Observe no comentário, da valerybodak, abaixo como isso é feito em um ambiente de desenvolvimento Android.
fonte
url.getUserInfo()
para obtenerURLDecoder.decode()
primeiro (@ Peter Rader).Como eu vim aqui à procura de uma resposta Java para Android, vou fazer um breve resumo:
Se você deseja usar o java.net.URLConnection com autenticação básica no Android, tente este código:
fonte
Conseguiu definir a autenticação usando o HttpsURLConnection
algumas das alterações obtidas nesta postagem. e Base64 é do pacote java.util.
fonte
Tenha muito cuidado com a abordagem "Base64 (). Encode ()", minha equipe e eu recebemos 400 problemas de solicitações ruins do Apache porque adiciona um \ r \ n no final da string gerada.
Achamos que ele cheirava pacotes graças ao Wireshark.
Aqui está a nossa solução:
Espero que ajude!
fonte
Use este código para autenticação básica.
fonte
Gostaria de fornecer uma resposta para o caso de você não ter controle sobre o código que abre a conexão. Como eu fiz ao usar o
URLClassLoader
para carregar um arquivo jar de um servidor protegido por senha.A
Authenticator
solução funcionaria, mas tem a desvantagem de tentar primeiro acessar o servidor sem uma senha e somente depois que o servidor solicitar uma senha forneça uma. Essa é uma ida e volta desnecessária se você já sabe que o servidor precisaria de uma senha.Isso registra um novo protocolo
my
que é substituído porhttp
quando as credenciais são adicionadas. Portanto, ao criar o novo,URLClassLoader
basta substituirhttp
pormy
e está tudo bem. Eu sei queURLClassLoader
fornece um construtor que leva um,URLStreamHandlerFactory
mas esta fábrica não é usada se o URL aponta para um arquivo jar.fonte
Desde o Java 9, você pode fazer isso
fonte
setAuthenticator()
método.IMPLEMENTAÇÃO ANDROD Um método completo para solicitar resposta de dados / string do serviço da Web solicitando autorização com nome de usuário e senha
fonte
eu fiz isso dessa maneira, você precisa fazer isso basta copiar e colar, seja feliz
fonte