@ в парола за 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 също решават различни проблеми при разбор. Определете кой слой чете входа, вместо да кодирате идентификационните данни многократно, докато поведението на заявката се промени.