Символ @ у паролі до Java-проксі
Передайте необроблений пароль у PasswordAuthentication і застосовуйте URL-кодування лише під час побудови реального URL проксі.
java.net.PasswordAuthentication приймає ім'я користувача й масив символів пароля. Передайте початкові символи пароля:
var credential = new java.net.PasswordAuthentication(
"proxy-user", "p@ssword".toCharArray());
Значення — ілюстративний пароль. У коді застосунку беріть справжні символи з потрібного джерела облікових даних.
Символ @ усередині цього пароля — дані, бо пароль уже має власний аргумент. Перетворення на p%40ssword до конструктора передає інший пароль.
URL проксі має інше подання облікових даних. У URL на кшталт http://proxy-user:p%[email protected]:8080 кодований @ належить до відомостей про користувача, а наступний @ відокремлює ці відомості від хоста. Декодуйте й кодуйте відповідно до інтерфейсу, який справді споживає значення.
Лапки в shell, екранування рядкових літералів Java і відсоткове кодування URL також розв'язують різні задачі розбору. Визначте, який шар читає ввід, замість повторно кодувати облікові дані, доки не зміниться поведінка запиту.