Frage Java: URL mit HTTPBasic-Authentifizierung abrufen


Ich mache eine einfache HTTP-Authentifizierung und erhalte eine

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

was meiner Meinung nach darauf zurückzuführen ist, dass ich einen wirklich langen Benutzernamen und ein Passwort habe und der Encoder es mit einem \n bei 76 Zeichen. Kann ich das irgendwie umgehen? 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;
}

9
2018-01-13 05:40


Ursprung


Antworten:


Das scheint ein zu sein Fehler in Java.

Haben Sie versucht, alternative HTTP-Clients zu verwenden, z. B. die Bibliothek von Apache?

Oder anstatt den Authenticator zu verwenden, den Header manuell einstellen?

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").


17
2018-01-13 06:02



Das funktioniert für mich.

HttpsURLConnection con = null; con = (HttpsURLConnection) obj.openConnection (); String encoding = Base64.getEncoder (). EncodeToString ("Benutzername: Passwort" .getBytes (StandardCharsets.UTF_8)); con.setRequestProperty ("Authorization", "Basic" + encoding.replaceAll ("\ n", ""));


1
2018-01-09 09:33



Ich habe festgestellt, dass der illegale Charakter von "Authorization: Basic", codiert verursacht wurde Das sollte "Authorization", "Basic" + codiert sein


0
2018-06-01 12:44