Android获取Cookies,持久化PHPSESSID (OkHttp ;HttpClient ;Afinal)
2016-08-30 09:55
316 查看
公司后台是用PHP实现的,为了安全需要在每次请求头传过去PHPSESSID进行验证
https://github.com/yangfuhai/afinal
这个本质上是封装的httpclient,所以获取方法和httpclient类似
于是试着获取FinalHttp的DefaultHttpClient对象,这样就可以了.
其他获取cookies可以参考这 https://github.com/fantouch/hack10086/commit/0a8d77fdaef1a1f71d579f00366b3e4f818e90a6 在第一次请求时获取到的PHPSESSID保存,然后在以后每一次请求时
后来换到Android Studio 升级了SDK,返现httpclient已经成过时的方法了.....
网络请求换成OkHttp
网上找了不少保持cookies的方法,很坑,都是抄来抄去的文章,内容雷同,而且,基本都用不上...
这样获取之后,也是在每次请求时
.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<String>() { @Override public void onSuccess(String t) { super.onSuccess(t); DefaultHttpClient dh = (DefaultHttpClient) http.getHttpClient(); CookieStore cookieStore = dh.getCookieStore(); List<Cookie> 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<HttpUrl, List<Cookie>> cookieStore = new HashMap<>(); @Override public void saveFromResponse(HttpUrl url, List<Cookie> 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<Cookie> loadForRequest(HttpUrl url) { List<Cookie> cookies = cookieStore.get(url); return cookies != null ? cookies : new ArrayList<Cookie>(); } }).build();忘了上面那些方法在哪看到的了,感谢.
这样获取之后,也是在每次请求时
.addHeader("Cookie", "PHPSESSID="+phpsessid)记录一下,下回有用的别的网络请求框架再补充进去
相关文章推荐
- android通过httpClient请求获取JSON数据并且解析
- android获取URLConnection和HttpClient网络请求响应码
- 微博开发原理简化android使用http访问php获取json
- android中HttpClient获取Session然后使用 WebView共享session的解决办法
- Android: HttpClient与Webview共享cookies
- android通过httpClient请求获取JSON数据并且解析
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
- android通过httpClient请求获取JSON数据并且解析
- android系统内置HttpClient库(WebView+ Http(s)URLConnection(ok-http)+ HttpClient(apache-http))
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
- Android HttpURLConnection和HttpClient获取网络内容
- Android HttpClient获取JSON数据并解析
- android通过httpClient请求获取JSON数据并且解析
- Android之网络----使用HttpClient发送HTTP请求(通过get方法获取数据)
- android获取URLConnection和HttpClient网络请求响应码
- Android HttpClient多线程获取网络数据抛出ConnectionPoolTimeoutException: Timeout waiting for connection
- Android开发 httpclient Post方法实现从tomcat服务器(JSP)获取listview信息
- android中HttpClient获取Session然后使用 WebView共享session的解决办法(转)
- android中HttpClient获取Session然后使用 WebView共享session的解决办法(转)
- android通过httpClient请求获取JSON数据并且解析