Вопрос-ответ

Connecting to remote URL which requires authentication using Java

Подключение к удаленному URL, для которого требуется аутентификация с использованием Java

Как мне подключиться к удаленному URL на Java, для которого требуется аутентификация. Я пытаюсь найти способ изменить следующий код, чтобы иметь возможность программно вводить имя пользователя / пароль, чтобы он не выдавал 401.

URL url = new URL(String.format("http://%s/manager/list", _host + ":8080"));
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
Переведено автоматически
Ответ 1

Существует встроенная и менее навязчивая альтернатива, которая работает только для вашего вызова.

URL url = new URL(“location address”);
URLConnection uc = url.openConnection();
String userpass = username + ":" + password;
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
uc.setRequestProperty ("Authorization", basicAuth);
InputStream in = uc.getInputStream();
Ответ 2

Вы можете установить аутентификатор по умолчанию для http-запросов следующим образом:

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

Кроме того, если вам требуется больше гибкости, вы можете проверить Apache HttpClient, который предоставит вам больше возможностей аутентификации (а также поддержку сеанса и т.д.)

Ответ 3

Вы также можете использовать следующее, которое не требует использования внешних пакетов:

URL url = new URL(“location address”);
URLConnection uc = url.openConnection();

String userpass = username + ":" + password;
String basicAuth = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes());

uc.setRequestProperty ("Authorization", basicAuth);
InputStream in = uc.getInputStream();
Ответ 4

Если вы используете обычный логин при вводе имени пользователя и пароля между протоколом и доменом, это проще. Это также работает с логином и без него.

Пример URL: http://user:pass@example.com/url

URL url = new URL("http://user:pass@example.com/url");
URLConnection urlConnection = url.openConnection();

if (url.getUserInfo() != null) {
String basicAuth = "Basic " + new String(new Base64().encode(url.getUserInfo().getBytes()));
urlConnection.setRequestProperty("Authorization", basicAuth);
}

InputStream inputStream = urlConnection.getInputStream();

Пожалуйста, обратите внимание в комментарии от valerybodak ниже, как это делается в среде разработки Android.

java