Я смотрю, как управлять файлами cookie и, в частности, токеном Csrf. Но проблема в том, что все примеры, которые я нахожу в сети, используют устаревшие функции в API 22, где Http-соединения были широко реструктурированы. Нелегко найти наш путь между всеми примерами, используя устаревшие функции.Как управлять файлами cookie в API 22
Я посмотрел на Android документ http://developer.android.com/reference/java/net/HttpURLConnection.html который, кажется, одно соответствие с HttpURLConnection для использования в API 22, но когда я пишу строки:
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
Eclipse, говорит мне, что CookieManager не может быть создан. Зачем?
В любом случае, я до сих пор не вижу, как будут обрабатываться файлы cookie.
- Это так волшебство ??
- Должен ли я помещать строки выше в Activity onCreate(), чтобы получить файлы cookie и, в частности, токен csrf «автоматически» доступен во всех фрагментах?
- Или нужно программно вставить файл cookie в мой POST ?
EDIT
Так что я изменил мой код так:
первый я отправить запрос GET, чтобы получить csrfToken назад.
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setUseCaches(false); // Don't use a Cached Copy
urlConnection.setRequestMethod("GET");
//urlConnection.setDoOutput(true);
if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
Map<String, List<String>> headers = urlConnection.getHeaderFields();
for (String key: headers.keySet()) {
Log.w("Headers", key + " = " + Arrays.toString(headers.get(key).toArray()));
}
Cookies.saveCookies(urlConnection);
} else {
return null;
}
И я проверил, что получаю и сохраняю csrfToken между другими.
Set-Cookie = [60gpBAK=R1224197954; path=/; expires=Fri, 29-May-2015 17:43:45 GMT, 60gpD=R637403390; path=/; max-age=900, csrfToken=175e1d85c1da067a2ea07b77e2f3b46b2a113620; path=/]
Теперь мой запрос POST:
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setChunkedStreamingMode(0);
Cookies.loadCookies(urlConnection);
urlConnection.setRequestProperty("Accept-Charset", "UTF-8");
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + "UTF-8");
OutputStream output = urlConnection.getOutputStream();
output.write(params.getBytes("UTF-8"));
headers = urlConnection.getHeaderFields();
for (String key: headers.keySet()) {
Log.w("Headers", key + " = " + Arrays.toString(headers.get(key).toArray()));
}
Но здесь Log.w() Ouput удивительно: нет setRequestProperty() модифицировали заголовки 'Accept-кодовую' нет ' content-type 'не тот, который я установил, ни cookie ни ??? :
05-29 18:27:48.791: W/Headers(11517): null = [HTTP/1.1 411 Length Required]
05-29 18:27:48.791: W/Headers(11517): Connection = [close]
05-29 18:27:48.791: W/Headers(11517): Content-Type = [text/html; charset=iso-8859-1]
05-29 18:27:48.791: W/Headers(11517): Date = [Fri, 29 May 2015 16:27:48 GMT]
05-29 18:27:48.791: W/Headers(11517): Server = [Apache]
05-29 18:27:48.791: W/Headers(11517): Set-Cookie = [60gpD=R637403390; path=/; expires=Fri, 29-May-2015 16:46:01 GMT]
05-29 18:27:48.792: W/Headers(11517): Vary = [Accept-Encoding]
05-29 18:27:48.792: W/Headers(11517): X-Android-Received-Millis = [1432916868791]
05-29 18:27:48.792: W/Headers(11517): X-Android-Response-Source = [NETWORK 411]
05-29 18:27:48.792: W/Headers(11517): X-Android-Sent-Millis = [1432916868760]
Какая у меня ошибка?
этот ответ http://stackoverflow.com/questions/32180500/android-api-23-deleted-packages/32377137 # 32377137 –