Android получить URL, который необходимо войти в систему - PullRequest
3 голосов
/ 26 ноября 2010

Я хочу получить данные с веб-страницы, которая содержит некоторые данные JSON.Проблема в том, что данные json возвращаются, только если пользователь вошел на сайт.Если это не так, страница входа возвращается.

URL url = new URL(API_URL);
URLConnection conn = url.openConnection();

BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream)));
StringBuilder builder = new StringBuilder();
String line = "";

while ((line = br.readLine()) != null) {
    builder.append(line + System.getProperty("line.separator"));
}
String result = builder.toString();

Итак, в result я ожидаю получить данные json.Но у меня есть страница входа в систему.Я попытался войти через браузер, но это не помогло.

Как мне использовать куки из моего браузера, чтобы пройти через эту страницу входа?

Ответы [ 2 ]

1 голос
/ 26 ноября 2010

Если бы было возможно получить произвольные файлы cookie из приложения браузера или загрузить данные через браузер, я был бы очень обеспокоен, потому что это было бы критическими недостатками безопасности. Представьте, что кто-то вошел в систему BankOfAmerica.com, и приложение может проверить сессионный cookie-файл bankofamerica.com или загрузить страницы bankofamerica.com через браузер. В любом случае приложение сможет выполнять действия онлайн-банкинга как зарегистрированный пользователь !

Простой ответ заключается в том, что ваше приложение должно запрашивать информацию для входа пользователя. Затем вы используете HttpClient в своем собственном хранилище cookie для входа в систему.

1 голос
/ 26 ноября 2010

Если вы использовали Java SE, я бы порекомендовал вам использовать библиотеку Apache HttpClient.Это поддерживает различные виды аутентификации, включая вход в систему на основе форм с использованием файлов cookie сеанса.Я не знаю, является ли это хорошей рекомендацией для Android.

РЕДАКТИРОВАТЬ

Я не заметил, что настоящей проблемой был доступ к файлам cookie браузера.

1: Вы пытались использовать android.wewbkit.CookieManager.getInstance() или createInstance(Context), чтобы завладеть экземпляром cookiemanager браузера?

2: Возможно линаписать свое приложение (или его часть) как плагин webkit, чтобы он мог таким образом получать доступ к cookie?(Я не знаю достаточно о webkit / android, чтобы знать, имеет ли это смысл.)

3: Если вы не можете этого сделать, вы можете написать свое приложение в качестве веб-прокси и заставить его «украсть»печенье, когда они проходят.(Хотя это звучит как плохая идея. Существуют проблемы безопасности и конфиденциальности, а также проблемы, которые могут помешать нормальной работе браузера.)

4: Наконец, существует запасной вариант написания вашего приложения.сделать свой собственный логин и управлять своим собственным сессионным cookie.Загвоздка в том, что вы не можете избежать того, чтобы ваше приложение относилось к способу входа на удаленный веб-сайт.

FOLLOWUP

@ В ответе Дэниэла Треббиена утверждается, что вариант 1:не стартер по соображениям безопасности.Это имеет смысл.(Если одно приложение может получить файлы cookie другого приложения, безопасность браузера будет отсутствовать.)

Хотя Android и предоставляет API-интерфейс подключаемых модулей, но он устарел, и я видел сообщение от инженера Android, в котором говорится, что егоиспользование не рекомендуется для стороннего кода.Это в значительной степени делает вариант 2: тупик.

Вариант 3: от пользователя потребуется настроить браузер своего телефона для использования вашего приложения в качестве прокси-сервера ... что, вероятно, не следует делать.

Несколько других вариантов, которые следует учитывать, - это:

5: Реализовать функциональность вашего приложения в Javascript как плагин для браузера NPAPI.

6: Используйте WebView, чтобы снабдить ваше приложение собственным (урезанным) веб-браузером.Естественно, ваше приложение будет иметь полный доступ к своему собственному экземпляру CookieManager.

...