Я хотел бы сделать http-запрос к удаленному серверу, правильно обрабатывая файлы cookie (например, сохраняя файлы cookie, отправленные сервером, и отправляя эти файлы cookie, когда я делаю последующие запросы). Было бы неплохо сохранить все файлы cookie, но на самом деле меня волнует только файл cookie сеанса.
С java.net кажется, что предпочтительный способ сделать это - использовать java.net.CookieHandler (абстрактный базовый класс) и java.net.CookieManager (конкретная реализация). В Android есть java.net.CookieHandler, но, похоже, нет java.net.CookieManager.
Я мог бы все это закодировать вручную, просмотрев заголовки http, но похоже, что должен быть более простой способ.
Как правильно выполнять HTTP-запросы на Android при сохранении файлов cookie?
java.net.CookieManager
теперь поддерживается в Android, начиная с версии 2.3 (уровень API 9): developer.android.com/reference/java/net/CookieManager.htmlОтветы:
Оказывается, Google Android поставляется с Apache HttpClient 4.0, и я смог выяснить, как это сделать, используя пример «Вход на основе формы» в документации HttpClient :
https://github.com/apache/httpcomponents-client/blob/master/httpclient5/src/test/java/org/apache/hc/client5/http/examples/ClientFormLogin.java
источник
The method getCookieStore() is undefined for the type HttpClient
, мне нужно перейти наList<Cookie> cookies = ((AbstractHttpClient) httpclient).getCookieStore().getCookies();
? Потому что если я это сделаю, это сработает.Файл cookie - это просто еще один заголовок HTTP. Вы всегда можете установить его при выполнении HTTP-вызова с библиотекой apache или с HTTPUrlConnection. В любом случае вы сможете читать и устанавливать файлы cookie HTTP таким образом.
Вы можете прочитать эту статью для получения дополнительной информации.
Я могу поделиться своим кодом, чтобы продемонстрировать, насколько легко вы можете это сделать.
источник
Поскольку библиотека Apache устарела , для тех, кто хочет ее использовать
HttpURLConncetion
, я написал этот класс для отправки запросов Get и Post с помощью этого ответа :источник
Я не работаю с google android, но думаю, вы обнаружите, что заставить это работать не так уж и сложно. Если вы прочтете соответствующий фрагмент руководства по java, вы увидите, что зарегистрированный обработчик файлов cookie получает обратные вызовы из кода HTTP.
Итак, если нет значения по умолчанию (вы проверили,
CookieHandler.getDefault()
действительно ли оно равно нулю?), Вы можете просто расширить CookieHandler, реализовать put / get и заставить его работать в значительной степени автоматически. Не забудьте рассмотреть возможность одновременного доступа и т.п., если вы идете по этому пути.edit: Очевидно, вам придется установить экземпляр своей пользовательской реализации в качестве обработчика по умолчанию
CookieHandler.setDefault()
для получения обратных вызовов. Забыл об этом упомянуть.источник