Android获取Cookies,持久化PHPSESSID (OkHttp ;HttpClient ;Afinal)
公司后台是用PHP实现的,为了安全需要在每次请求头传过去PHPSESSID进行验证
.addHeader("Cookie","PHPSESSID="+ToolsUser.getPhpsessid())
之前项目使用的afinal的FinalHttp模块来请求数据
https://github.com/yangfuhai/afinal
这个本质上是封装的httpclient,所以获取方法和httpclient类似
AjaxParamsparams=newAjaxParams();params.put("x","xxx");params.put("xx","xx");newFinalHttp().get("url",params,newAjaxCallBack<String>(){@OverridepublicvoidonSuccess(Stringt){super.onSuccess(t);DefaultHttpClientdh=(DefaultHttpClient)http.getHttpClient();CookieStorecookieStore=dh.getCookieStore();List<Cookie>cookies=cookieStore.getCookies();for(inti=0,len=cookies.size();i<len;i++){if("PHPSESSID".equals(cookies.get(i).getName())){Stringphpsessid=cookies.get(i).getValue();}}});}
之前一直没找到方法,直到在某个地方看到HttpClient获取cookies的方法,
于是试着获取FinalHttp的DefaultHttpClient对象,这样就可以了.
其他获取cookies可以参考这
https://github.com/fantouch/hack10086/commit/0a8d77fdaef1a1f71d579f00366b3e4f818e90a6
在第一次请求时获取到的PHPSESSID保存,然后在以后每一次请求时
newFinalHttp().addHeader("Cookie","PHPSESSID="+phpsessid)
这样就能保存用户的登录状态了.
后来换到Android Studio 升级了SDK,返现httpclient已经成过时的方法了.....
网络请求换成OkHttp
网上找了不少保持cookies的方法,很坑,都是抄来抄去的文章,内容雷同,而且,基本都用不上...
newThread(newRunnable(){@Overridepublicvoidrun(){try{Stringt=run1("url?x=xxx&xx=xx");}catch(IOExceptione){e.printStackTrace();}}}).start();
privateStringrun1(Stringurl)throwsIOException{Requestrequest=newRequest.Builder().url(url).build();Responseresponse=client.newCall(request).execute();Stringstring=response.body().string();returnstring;}
privateOkHttpClientclient=newOkHttpClient.Builder().cookieJar(newCookieJar(){privatefinalHashMap<HttpUrl,List<Cookie>>cookieStore=newHashMap<>();@OverridepublicvoidsaveFromResponse(HttpUrlurl,List<Cookie>cookies){if(cookies!=null){for(inti=0,len=cookies.size();i<len;i++){if("PHPSESSID".equals(cookies.get(i).name())){Stringphpsessid=cookies.get(i).value();}}}cookieStore.put(url,cookies);}@OverridepublicList<Cookie>loadForRequest(HttpUrlurl){List<Cookie>cookies=cookieStore.get(url);returncookies!=null?cookies:newArrayList<Cookie>();}}).build();
忘了上面那些方法在哪看到的了,感谢.
这样获取之后,也是在每次请求时
.addHeader("Cookie","PHPSESSID="+phpsessid)
记录一下,下回有用的别的网络请求框架再补充进去
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。