公司后台是用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)

记录一下,下回有用的别的网络请求框架再补充进去