真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android獲取Cookies,持久化PHPSESSID(OkHttp;HttpClient;Afinal)

公司后臺(tái)是用PHP實(shí)現(xiàn)的,為了安全需要在每次請(qǐng)求頭傳過去PHPSESSID進(jìn)行驗(yàn)證

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比阜康網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式阜康網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋阜康地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。

.addHeader("Cookie", "PHPSESSID="+ToolsUser.getPhpsessid())

之前項(xiàng)目使用的afinal的FinalHttp模塊來請(qǐng)求數(shù)據(jù)

https://github.com/yangfuhai/afinal

這個(gè)本質(zhì)上是封裝的httpclient,所以獲取方法和httpclient類似

AjaxParams params = new AjaxParams();
params.put("x", "xxx");
params.put("xx", "xx");
new FinalHttp().get("url", params, new AjaxCallBack() {
    @Override
    public void onSuccess(String t) {
        super.onSuccess(t);
        DefaultHttpClient dh = (DefaultHttpClient) http.getHttpClient();
	CookieStore cookieStore = dh.getCookieStore();
	List cookies = cookieStore.getCookies();
	for (int i = 0, len = cookies.size(); i < len; i++) {
	    if ("PHPSESSID".equals(cookies.get(i).getName())) {
		String phpsessid = cookies.get(i).getValue();
	    }
	}
    });
}

之前一直沒找到方法,直到在某個(gè)地方看到HttpClient獲取cookies的方法,

于是試著獲取FinalHttp的DefaultHttpClient對(duì)象,這樣就可以了.
其他獲取cookies可以參考這

https://github.com/fantouch/hack10086/commit/0a8d77fdaef1a1f71d579f00366b3e4f818e90a6 

在第一次請(qǐng)求時(shí)獲取到的PHPSESSID保存,然后在以后每一次請(qǐng)求時(shí)

new FinalHttp().addHeader("Cookie", "PHPSESSID=" + phpsessid)

這樣就能保存用戶的登錄狀態(tài)了.

后來換到Android Studio 升級(jí)了SDK,返現(xiàn)httpclient已經(jīng)成過時(shí)的方法了.....

網(wǎng)絡(luò)請(qǐng)求換成OkHttp 

網(wǎng)上找了不少保持cookies的方法,很坑,都是抄來抄去的文章,內(nèi)容雷同,而且,基本都用不上...

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            String t = run1("url?x=xxx&xx=xx");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}).start();
private String run1(String url) throws IOException {
    Request request = new Request.Builder().url(url).build();
    Response response = client.newCall(request).execute();
    String string = response.body().string();
    return string;
}
private OkHttpClient client = new OkHttpClient.Builder().cookieJar(new CookieJar() {

    private final HashMap> cookieStore = new HashMap<>();
    
    @Override
    public void saveFromResponse(HttpUrl url, List cookies) {
       if (cookies != null) {
             for (int i = 0, len = cookies.size(); i < len; i++) {
                  if ("PHPSESSID".equals(cookies.get(i).name())) {
                       String phpsessid = cookies.get(i).value();
                   }
              }
       }
       cookieStore.put(url, cookies);
    }

    @Override
    public List loadForRequest(HttpUrl url) {
        List cookies = cookieStore.get(url);
        return cookies != null ? cookies : new ArrayList();
    }
}).build();

忘了上面那些方法在哪看到的了,感謝.

這樣獲取之后,也是在每次請(qǐng)求時(shí)

.addHeader("Cookie", "PHPSESSID="+phpsessid)

記錄一下,下回有用的別的網(wǎng)絡(luò)請(qǐng)求框架再補(bǔ)充進(jìn)去


文章題目:Android獲取Cookies,持久化PHPSESSID(OkHttp;HttpClient;Afinal)
URL地址:http://weahome.cn/article/pdohgh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部