您好,登錄后才能下訂單哦!
公司后臺是用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<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)
記錄一下,下回有用的別的網絡請求框架再補充進去
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。