公司后臺(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)去