1. 程式人生 > >android 持久化儲存cookie

android 持久化儲存cookie

轉:http://blog.csdn.net/jwzhangjie/article/details/29861111

在解析網頁資訊的時候,需要登入後才能訪問,所以使用httpclient模擬登入,然後把cookie儲存下來,以供下一次訪問使用,這時就需要持久化cookie中的內容。

一、請求網路獲取cookie

先看一下下面的程式碼:

  1.   DefaultHttpClient httpclient = new DefaultHttpClient();  
  2.           HttpGet httpget = new HttpGet("http://www.hlovey.com"
    );  
  3.           HttpResponse response = httpclient.execute(httpget);  
  4.           HttpEntity entity = response.getEntity();  
  5.           List<Cookie> cookies = httpclient.getCookieStore().getCookies(); 
Post模擬登入
  1.         HttpPost httpPost = new HttpPost(url);  
  2.         List<NameValuePair> formparams = new
     ArrayList<NameValuePair>();  
  3.         formparams.add(new BasicNameValuePair("id", userid));  
  4.         formparams.add(new BasicNameValuePair("passwd", passwd));  
  5.         UrlEncodedFormEntity entity;  
  6.         try {  
  7.             entity = new UrlEncodedFormEntity(formparams, mobileSMTHEncoding);  
  8.         } catch (UnsupportedEncodingException e1) {  
  9.             return3;  
  10.         }  
  11.         httpPost.setEntity(entity);  
  12.         httpPost.setHeader("User-Agent", userAgent);  
  13.         HttpResponse response = httpClient.execute(httpPost);  
二、儲存cookie

儲存cookie有兩種方式一種是資料庫,另一種是SharedPreferences,其中http://blog.csdn.net/junjieking/article/details/7658551是使用資料庫來儲存的,這裡我是使用SharedPreferences儲存。

  1. package com.smthbest.smth.util;  
  2. import java.util.Locale;  
  3.         import android.content.Context;  
  4.         import android.content.SharedPreferences;  
  5.         import android.text.TextUtils;  
  6.         import android.util.Log;  
  7.         import org.apache.http.client.CookieStore;  
  8.         import org.apache.http.cookie.Cookie;  
  9.         import java.io.ByteArrayInputStream;  
  10.         import java.io.ByteArrayOutputStream;  
  11.         import java.io.ObjectInputStream;  
  12.         import java.io.ObjectOutputStream;  
  13.         import java.util.ArrayList;  
  14.         import java.util.Date;  
  15.         import java.util.List;  
  16.         import java.util.Locale;  
  17.         import java.util.concurrent.ConcurrentHashMap;  
  18. publicclass PersistentCookieStore implements CookieStore {  
  19.     privatestaticfinal String LOG_TAG = "PersistentCookieStore";  
  20.     privatestaticfinal String COOKIE_PREFS = "CookiePrefsFile";  
  21.     privatestaticfinal String COOKIE_NAME_STORE = "names";  
  22.     privatestaticfinal String COOKIE_NAME_PREFIX = "cookie_";  
  23.     privateboolean omitNonPersistentCookies = false;  
  24.     privatefinal ConcurrentHashMap<String, Cookie> cookies;  
  25.     privatefinal SharedPreferences cookiePrefs;  
  26.     /** 
  27.      * Construct a persistent cookie store. 
  28.      * 
  29.      * @param context Context to attach cookie store to 
  30.      */
  31.     public PersistentCookieStore(Context context) {  
  32.         cookiePrefs = context.getSharedPreferences(COOKIE_PREFS, 0);  
  33.         cookies = new ConcurrentHashMap<String, Cookie>();  
  34.         // Load any previously stored cookies into the store
  35.         String storedCookieNames = cookiePrefs.getString(COOKIE_NAME_STORE, null);  
  36.         if (storedCookieNames != null) {  
  37.             String[] cookieNames = TextUtils.split(storedCookieNames, ",");  
  38.             for (String name : cookieNames) {  
  39.                 String encodedCookie = cookiePrefs.getString(COOKIE_NAME_PREFIX + name, null);  
  40.                 if (encodedCookie != null) {  
  41.                     Cookie decodedCookie = decodeCookie(encodedCookie);  
  42.                     if (decodedCookie != null) {  
  43.                         cookies.put(name, decodedCookie);  
  44.                     }  
  45.                 }  
  46.             }  
  47.             // Clear out expired cookies
  48.             clearExpired(new Date());  
  49.         }  
  50.     }  
  51.     @Override
  52.     publicvoid addCookie(Cookie cookie) {  
  53.         if (omitNonPersistentCookies && !cookie.isPersistent())  
  54.             return;  
  55.         String name = cookie.getName() + cookie.getDomain();  
  56.         // Save cookie into local store, or remove if expired
  57.         if (!cookie.isExpired(new Date())) {  
  58.             cookies.put(name, cookie);  
  59.         } else {  
  60.             cookies.remove(name);  
  61.         }  
  62.         // Save cookie into persistent store
  63.         SharedPreferences.Editor prefsWriter = cookiePrefs.edit();  
  64.         prefsWriter.putString(COOKIE_NAME_STORE, TextUtils.join(",", cookies.keySet()));  
  65.         prefsWriter.putString(COOKIE_NAME_PREFIX + name, encodeCookie(new SerializableCookie(cookie)));  
  66.         prefsWriter.commit();  
  67.     }  
  68.     @Override
  69.     publicvoid clear() {  
  70.         // Clear cookies from persistent store
  71.         SharedPreferences.Editor prefsWriter = cookiePrefs.edit();  
  72.         for (String name : cookies.keySet()) {  
  73.             prefsWriter.remove(COOKIE_NAME_PREFIX + name);  
  74.         }  
  75.         prefsWriter.remove(COOKIE_NAME_STORE);  
  76.         prefsWriter.commit();  
  77.         // Clear cookies from local store
  78.         cookies.clear();  
  79.     }  
  80.     @Override
  81.     publicboolean clearExpired(Date date) {  
  82.         boolean clearedAny = false;  
  83.         SharedPreferences.Editor prefsWriter = cookiePrefs.edit();  
  84. 相關推薦

    android 持久化儲存cookie

    轉:http://blog.csdn.net/jwzhangjie/article/details/29861111 在解析網頁資訊的時候,需要登入後才能訪問,所以使用httpclient模擬登入,然後把cookie儲存下來,以供下一次訪問使用,這時就需要持久化

    android webview 儲存cookie

    在用webview登陸某網站web客戶端時,需要儲存cookie,這樣退出再進入時就不用二次登陸,android使用webview解決Cookie問題的方法是———————————————— public class WebClientActivity extends Ac

    Android持久化資料儲存——File、SharedPreferences、SQLite

    package com.example.mjon.myapplication; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import a

    Android AsyncHttpClient登入儲存cookie和讀寫cookie

    AsyncHttpClient有個特性:(11)持久化cookie儲存,可以將cookie儲存到你的應用程式的SharedPreferences中AsyncHttpClient Cookie相關的官方的文件This library also includes a Persis

    Android使用Asynchronous Http Client完成登入儲存cookie的問題

    Persistent Cookie Storage with PersistentCookieStore  This library also includes a PersistentCookieStore which is an implementation of the Apache HttpClie

    關於Android使用Xutils的WebView儲存Cookie登入

    /** * Sync Cookie */ private void syncCookie(Context context, String url){ try{ Log.d("Nat: webView.syncCookie.url", url);

    餓了麼開源專案:便捷高效的Android資料持久化儲存框架

    版權所有。所有權利保留。 歡迎轉載,轉載時請註明出處: Android應用開發時經常要對許多資料進行持久化儲存,便於以後訪問。 對於int、double、boolean這些基本資料,可以使用SharedPreference。對於一些物件,往SharedPrefe

    android下資料的持久化儲存

    列表內容 資料持久化儲存有 檔案儲存(內建儲存,外接儲存(sd卡)), SharedPreference , 資料庫 , 伺服器儲存. 使用檔案 , SharedPreference 或資料庫來儲存資料會相對更簡單些,而且比起將資料儲存在 SD 卡中會更加的

    Android資料儲存五種方式

    https://www.cnblogs.com/ITtangtang/p/3920916.html SharedPreferences的基本使用-----存,刪,改,查:https://www.cnblogs.com/qianzf/p/7582400.html Android Sha

    Python3 Post登入並且儲存cookie登入其他頁面

    import urllib.request import sys import http.cookiejar import urllib.parse from bs4 import BeautifulSoup import codecs import re #登入頁面 url = "h

    Android 資料儲存之 SQLite資料庫儲存

    轉載自:https://www.cnblogs.com/woider/p/5136734.html ----------------------------------------SQLite資料庫---------------------------------------------- SQLite是一

    Android手機儲存路徑

    手機儲存 手機分為內部儲存和外部儲存 1、內部儲存 主要方法 路徑 Environment.getDataDirectory() /data Environment.getDo

    Android 外部儲存,內部儲存路徑

    import android.content.Context; import android.os.Environment; import android.util.Log; public class DirectoryUtils { private static final String

    Android實現儲存圖片,長圖、長佈局(webView等)

    最近開發遇到一個問題,分享的時候 需要分享一個佈局內容,但是要用圖片分享的格式,最開始思考感覺不可能實現,手機上很少有功能可以實現長圖儲存的, 可是經理說,髮長微博的時候就是自動儲存的長圖片,頓時傻眼了,人家是怎麼做的呢??? 本已經放棄該功能,可這麼一說,又開始在網上找,並沒有很明確的找到

    Android 本地儲存之外部儲存/內部儲存路徑獲取大全

    //:/system String rootDir = Environment.getRootDirectory().toString(); System.out.println("Environment.getRootDirectory()=:" +

    iOS 之持久化儲存 plist、NSUserDefaults、NSKeyedArchiver、資料庫

    1.什麼是持久化? 本人找了好多文章都沒有找到滿意的答案,最後是從孫衛琴寫的《精通Hibernate:Java物件持久化技術詳解》中,看到如下的解釋,感覺還是比較完整的。摘抄如下:  狹義的理解: “持久化”僅僅指把域物件永久儲存到資料庫中;廣義的理解,“持久化”包括和資料庫相關的各種操作。&n

    android 資料儲存&lt;一&gt;----android簡訊傳送器之檔案的讀寫(手機+SD卡)

    本文實踐知識點有有三: 1.佈局檔案,android佈局有相對佈局。線性佈局,絕對佈局。表格佈局。標籤佈局等,各個佈局能夠巢狀的。 本文的佈局檔案就是線性佈局的巢狀 <LinearLayout xmlns:android="http://schemas.and

    python cookiejar儲存cookie資訊

    cookie資訊是什麼? cookie, 某些網站為了辨別使用者身份, 只有登陸之後才能訪問某個頁面; 進行一個會話跟蹤, 將使用者的相關資訊包括使用者名稱等儲存到本地終端 from http import cookiejar from urllib.request import

    android刪除儲存卡中的目錄及目錄下的檔案

    首先,需要在AndroidManifest.xml中配置寫許可權 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 刪除檔案方法 public static boolean

    k8s的持久化儲存PV&&PVC

    1.PV和PVC的引入 Volume 提供了非常好的資料持久化方案,不過在可管理性上還有不足。 拿前面 AWS EBS 的例子來說,要使用 Volume,Pod 必須事先知道如下資訊: 當前 Volume 來自 AWS EBS。 EBS Volume 已經提前建立,並且知道確切的 vol