Frage

Ich mache eine einfache HTTP -Authentifizierung und bekomme eine

java.lang.IllegalArgumentException: Illegal character(s) in message header value: Basic OGU0ZTc5ODBk(...trimmed from 76 chars...)
(...more password data...)

Was ich denke, weil ich einen wirklich langen Benutzernamen und ein Passwort habe und der Encoder es mit einem umhüllt \n bei 76 Chars. Gibt es eine Möglichkeit, das umherzugehen? Die URL unterstützt nur HTTP Basic Auth.

Hier ist mein Code:

private class UserPassAuthenticator extends Authenticator {
    String user;
    String pass;
    public UserPassAuthenticator(String user, String pass) {
        this.user = user;
        this.pass = pass;
    }

    // This method is called when a password-protected URL is accessed
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(user, pass.toCharArray());
    }
}

private String fetch(StoreAccount account, String path) throws IOException {
    Authenticator.setDefault(new UserPassAuthenticator(account.getCredentials().getLogin(), account.getCredentials().getPassword()));

    URL url = new URL("https", account.getStoreUrl().replace("http://", ""), path);
    System.out.println(url);

    URLConnection urlConn = url.openConnection();
    Object o = urlConn.getContent();
    if (!(o instanceof String)) 
        throw new IOException("Wrong Content-Type on " + url.toString());

    // Remove the authenticator back to the default
    Authenticator.setDefault(null);
    return (String) o;
}
War es hilfreich?

Lösung

Das scheint ein zu sein Fehler in Java.

Haben Sie versucht, alternative HTTP -Clients wie die Bibliothek von Apache zu verwenden?

Oder anstatt den Authentikator zu verwenden und den Header manuell zu setzen?

URL url = new URL("http://www.example.com/");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Authorization", "Basic OGU0ZTc5ODBkABcde....");

Der Token -Wert ist Encodebase64 ("Benutzername: Passwort").

Andere Tipps

Das funktioniert für mich.

HttpsurlConnection con = null; con = (httpsurlConnection) obj.OpenConnection (); String coding = base64.getEnCoder (). CodetoString ("Benutzername: Passwort" .GetByTes (StandardCharets.utf_8)); con.setRequestProperty ("Autorisierung", "Basic"+coding.replaceall (" n", "");

Ich fand heraus, dass der illegale Charakter durch "Autorisierung: grundlegend" verursacht wurde, codiert, was "Autorisierung", "Basic" + codiert sein sollte

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top