Подтвердить что ты не робот

Как обрабатывать HTTP-аутентификацию с помощью HttpURLConnection?

Я пишу клиент Java, который отправляет POST на HTTP-сервер, для которого требуется аутентификация.
Я должен поддерживать, по крайней мере, следующие три метода проверки подлинности: Basic, Digest или Negotiate. Кроме того, POST может быть очень большим (более 2 МБ), поэтому мне нужно использовать потоковое вещание. Как описано для HttpURLConnection

Когда потоковая передача включена, аутентификация и перенаправление не могут обрабатываться автоматически. HttpRetryException будет выбрасываться при чтении ответа, если требуется проверка подлинности или перенаправление.

Итак, мне нужно самому обрабатывать аутентификацию. Я искал и снова искал способ использования уже закодированных классов - но не нашел пути...

Я мог бы просто вырвать необходимые источники из здесь (поскольку они являются GPLv2 с исключением Classpath). Правильно ли это?

Спасибо.

4b9b3361

Ответ 1

Вам нужна потоковая передача данных? HttpURLConnection наиболее определенно поддерживает аутентификацию с классом Authenticator, см. Http Authentication.

Обновление: В случае, если Authenticator не является параметром, вы можете вручную выполнить базовую проверку HTTP, добавив дополнительный заголовок к вашему HTTP-запросу. Попробуйте следующий код (непроверенный):

String userPassword = username + ":" + password;
String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes());
URLConnection uc = url.openConnection();
uc.setRequestProperty("Authorization", "Basic " + encoding);
uc.connect();

Ответ 2

Связано с комментарием @Mat:

Вот пример, используемый моей командой и мной:

import org.apache.commons.codec.binary.Base64;

HttpGet getRequest = new HttpGet(endpoint);
getRequest.addHeader("Authorization", "Basic " + getBasicAuthenticationEncoding());

private String getBasicAuthenticationEncoding() {

        String userPassword = username + ":" + password;
        return new String(Base64.encodeBase64(userPassword.getBytes()));
    }

Надеюсь, что это поможет!