HTTP-аутентификация в J2ME
Вопрос
Я пытаюсь создать приложение J2ME, которое взаимодействует с веб-сервером, используя HTTPConnection
разъем.
Когда я разговариваю с веб-сервером, мне приходится проходить аутентификацию с использованием базовой HTTP-аутентификации, которая обычно выглядит следующим образом:
http://имя пользователя:пароль@сайт.com/rest/api/method
Но в J2ME, когда я создаю URL-адрес этой формы, он не работает.
Я также попробовал добавить свойство запроса,
hc = (HttpConnection) Connector.open(url);
hc.setRequestProperty("User", "alagu");
hc.setRequestProperty("pass", "mypassword");
но не сработало.
Кто-нибудь раньше делал HTTP-аутентификацию на основе j2me?Заранее спасибо.
Решение
Возможно, J2ME не поддерживает базовую аутентификацию, я могу ошибаться.Если вы хотите попробовать просто установить заголовок аутентификации в запросе самостоятельно, вам, скорее всего, понадобится другой заголовок, чем тот, который вы используете.
Из РФЦ:
Чтобы получить авторизацию, клиент отправляет идут и пароль, разделенный одним символом толстой кишки («:»), в пределах кодируемой строки Base64 [7] в учетных данных.
[...]
Если пользовательский агент желает отправить иид «Аладдин» и пароль «Открыть кунжут», он будет использовать следующее поле заголовка:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Итак, просто создайте строку «Пользователь: пароль», закодируйте ее в base64, а затем вызовите setRequestProperty("Authorization", "Basic "+ encodedUserAndPass)
Другие советы
Невероятно, это работает как шарм:
String url = "hppt://www.example.com";
HttpConnection hc = (HttpConnection) Connector.open(url);
hc.setRequestProperty("Authorization", "Basic "+ BasicAuth.encode("user", "password"));
Я использовал кодировщик/декодер Base64 криптографической библиотеки Bouncy Castle.Он очень эффективен для преодоления множества ограничений, установленных API Java ME/J2ME.Он имеет открытый исходный код и работает как для Java ME, так и для Android.