IOException в Basi c Аутентификация для HTTP URL - PullRequest
2 голосов
/ 03 марта 2020

Я нажимаю URL-адрес HTTP с именем пользователя: пароль, используя код JAVA. Ниже мой код

public static main (String args[]){
try{ 

                    String webPage = "http://00.00.000.000:8080/rsgateway/data/v3/user/start/";
        String name = "abc001";
        String password = "abc100";
        String authString = name + ":" + password;
        System.out.println("auth string: " + authString);
        byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
        String authStringEnc = new String(authEncBytes);
        URL url = new URL(webPage);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setUseCaches(true);
            connection.setRequestMethod("GET");
        connection.setRequestProperty("Authorization","Basic " +authStringEnc);
                    connection.setRequestProperty("Accept", "application/xml");
                    connection.setRequestProperty("Content-Type", "application/xml");
        InputStream is = connection.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);

        int numCharsRead;
        char[] charArray = new char[1024];
        StringBuffer sb = new StringBuffer();
        while ((numCharsRead = isr.read(charArray)) > 0) {
            sb.append(charArray, 0, numCharsRead);
        }
        String result = sb.toString();

        System.out.println("*** BEGIN ***");
        System.out.println(result);
        System.out.println("*** END ***");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Но я получаю 401 Ошибка

java .io.IOException: Сервер вернул код ответа HTTP: 401 для URL:

тот же URL, если я нажал, используя curl, то он возвращает ответ. ниже приведена команда curl.

curl -u abc001: abc100 http://00.00.000.000: 8080 / rsgateway / data / v3 / user / start /

Пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 03 марта 2020

Код, который вы получаете: HTTP 401 Unauthorized, что означает, что сервер неправильно интерпретирует вашу аутентификацию basi c.

Поскольку вы говорите, что команда curl с базисом c аутентификация, которую вы показали, работает, я предполагаю, что проблема в вашем коде.

Похоже, вы пытались следовать этому коду.

Единственная ошибка Я могу видеть (но я не могу проверить это, чтобы быть уверенным), что вы просто приводите byte[] к String вместо того, чтобы кодировать его с Base64.

Таким образом, вы должны изменить это:

String authStringEnc = new String(authEncBytes);

до этого:

String authStringEnc = Base64.getEncoder().encodeToString(authEncBytes);

Также вы хотите изменить на это:

byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());

на это:

byte[] authEncBytes = authString.getBytes();

byte[] authEncBytes = authString.getBytes(StandardCharsets.UTF_8);

...