Ein @ in einem Java-Proxy-Passwort
Übergeben Sie das rohe Passwort an PasswordAuthentication und wenden Sie die URL-Kodierung nur beim Erstellen einer tatsächlichen Proxy-URL an.
java.net.PasswordAuthentication erhält einen Benutzernamen und ein Zeichenarray für das Passwort. Übergeben Sie die ursprünglichen Passwortzeichen:
var credential = new java.net.PasswordAuthentication(
"proxy-user", "p@ssword".toCharArray());
Der Wert ist ein beispielhaftes Passwort. Rufen Sie im Anwendungscode die echten Zeichen aus der vorgesehenen Anmeldedatenquelle ab.
Ein @ in diesem Passwort ist ein Datum, denn das Passwort hat bereits sein eigenes Argument. Eine Umwandlung in p%40ssword vor dem Konstruktor übergibt ein anderes Passwort.
Eine Proxy-URL hat eine andere Darstellung der Anmeldedaten. In einer URL wie http://proxy-user:p%[email protected]:8080 gehört das kodierte @ zu den Benutzerinformationen, während das spätere @ diese Informationen vom Host trennt. Dekodieren und kodieren Sie entsprechend der Schnittstelle, die den Wert tatsächlich verarbeitet.
Shell-Quoting, das Escaping von Java-String-Literalen und die prozentuale URL-Kodierung lösen ebenfalls unterschiedliche Parsingprobleme. Bestimmen Sie, welche Ebene die Eingabe liest, anstatt die Anmeldedaten wiederholt zu kodieren, bis sich das Verhalten einer Anfrage ändert.