公司后台是用PHP实现的,为了安全需要在每次请求头传过去PHPSESSID进行验证

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

之前项目使用的afinal的FinalHttp模块来请求数据

https://github.com/yangfuhai/afinal

这个本质上是封装的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();    }}    });}

之前一直没找到方法,直到在某个地方看到HttpClient获取cookies的方法,

于是试着获取FinalHttp的DefaultHttpClient对象,这样就可以了.
其他获取cookies可以参考这

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

在第一次请求时获取到的PHPSESSID保存,然后在以后每一次请求时

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

这样就能保存用户的登录状态了.

后来换到Android Studio 升级了SDK,返现httpclient已经成过时的方法了.....

网络请求换成OkHttp 

网上找了不少保持cookies的方法,很坑,都是抄来抄去的文章,内容雷同,而且,基本都用不上...

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();

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

这样获取之后,也是在每次请求时

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

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

更多相关文章

  1. 【Android开发进阶系列,整理】Android与h5交互专题
  2. Ionic2实现自定义Cordova插件-Android屏幕录制
  3. Android(安卓)搭建MVP+Retrofit+RxJava网络请求框架(二)
  4. Android滑动事件冲突解决 Touch事件处理机制
  5. android 获取本地Music资源列表
  6. Android(安卓)TCP 文件客户端文件下载与服务器
  7. setHint方法
  8. 十九、android中判断sim卡状态和读取联系人资料的方法
  9. android onCreate(Bundle savedInstanceState)

随机推荐

  1. android源码下载并绑定到Eclipse中
  2. [译]提升Android应用性能的小贴士
  3. Android中@id与@+id区别
  4. [置顶] Android目录(更新中)
  5. Android 图解向 Android Studio 中导入 E
  6. Android(安卓)apiDemo 学习
  7. [转]Android高手应该精通哪些内容?
  8. Android APK应用安装原理(1)-解析Android
  9. Android实训案例(七)——四大组件之一Servi
  10. [置顶] android软键盘弹出,会把原来的界面