Как подключиться к удаленному URL-адресу в Java, который требует аутентификации. Я пытаюсь найти способ изменить следующий код, чтобы иметь возможность программно предоставить имя пользователя / пароль, чтобы он не генерировал ошибку 401.
URL url = new URL(String.format("http://%s/manager/list", _host + ":8080"));
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
java
httpurlconnection
user14128
источник
источник
Ответы:
Вы можете установить аутентификатор по умолчанию для HTTP-запросов следующим образом:
Кроме того, если вам требуется большая гибкость, вы можете проверить Apache HttpClient , который предоставит вам больше возможностей аутентификации (а также поддержку сеансов и т. Д.)
источник
Authenticator
конкретногоURL.openConnection()
вызова, а не глобально?HttpURLConnection.setAuthenticator()
. К сожалению, в Java 8 и более ранних версиях экземпляр Authenticator является глобальной переменной JVM. См .: docs.oracle.com/javase/9/docs/api/java/net/…Есть собственная и менее навязчивая альтернатива, которая работает только для вашего звонка.
источник
.trim()
результат или не вызовете вариант метода, который не создает фрагментированный вывод.javax.xml.bind.DatatypeConverter
кажется безопаснее.Вы также можете использовать следующее, что не требует использования внешних пакетов:
источник
--add-modules javax.xml.bind
поскольку они удалили пакет из пути к классам по умолчанию. А в Java11 + он вообще удален, вам снова нужна внешняя зависимость. Такой прогресс!java.util.Base64
сейчас, так что это действительно прогресс :)Если вы используете обычный вход при вводе имени пользователя и пароля между протоколом и доменом, это проще. Он также работает с логином и без него.
Пример URL: http: // user: pass@domain.com/url
Обратите внимание в комментарии от valerybodak ниже, как это делается в среде разработки Android.
источник
url.getUserInfo()
КопаниеURLDecoder.decode()
первый (@Peter Rader).Поскольку я пришел сюда в поисках ответа на Android-Java, я сделаю краткое резюме:
Если вы хотите использовать java.net.URLConnection с базовой аутентификацией в Android, попробуйте этот код:
источник
Удалось установить аутентификацию с помощью HttpsURLConnection
некоторые изменения извлечены из этого сообщения. а Base64 - из пакета java.util.
источник
Будьте очень осторожны с подходом «Base64 (). Encode ()», моя команда и я получили 400 проблем с неверными запросами Apache, потому что он добавляет \ r \ n в конец сгенерированной строки.
Мы обнаружили, что он перехватывает пакеты благодаря Wireshark.
Вот наше решение:
Надеюсь, поможет!
источник
Используйте этот код для базовой аутентификации.
источник
Я хотел бы дать ответ на тот случай, если вы не контролируете код, открывающий соединение. Как и я, когда использовал
URLClassLoader
для загрузки файла jar с сервера, защищенного паролем.Authenticator
Решение будет работать , но имеет тот недостаток , что он первый пытается получить доступ к серверу без пароля , и только после того , как сервер запрашивает пароль обеспечивает один. Это ненужный обходной путь, если вы уже знаете, что серверу потребуется пароль.Это регистрирует новый протокол,
my
который заменяетсяhttp
при добавлении учетных данных. Поэтому при создании новогоURLClassLoader
просто заменитеhttp
на,my
и все в порядке. Я знаю, чтоURLClassLoader
предоставляет конструктор, который принимает,URLStreamHandlerFactory
но эта фабрика не используется, если URL-адрес указывает на файл jar.источник
Начиная с Java 9, вы можете сделать это
источник
setAuthenticator()
метода.РЕАЛИЗАЦИЯ ANDROD Полный метод запроса данных / строкового ответа от веб-службы, запрашивающей авторизацию с именем пользователя и паролем.
источник
я сделал это так, вам нужно сделать это просто скопируйте и вставьте, будь счастлив
источник