91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android獲取Cookies,持久化PHPSESSID (OkHttp ;HttpClient ;Afinal)

發布時間:2020-06-29 09:57:51 來源:網絡 閱讀:3107 作者:拾荒者老大 欄目:移動開發

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

記錄一下,下回有用的別的網絡請求框架再補充進去

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

紫金县| 临夏市| 和硕县| 秭归县| 江永县| 南阳市| 灯塔市| 鄂尔多斯市| 平度市| 榆社县| 宾川县| 巩义市| 阿勒泰市| 新蔡县| 东台市| 台南县| 莱州市| 区。| 潞城市| 叙永县| 会宁县| 温宿县| 股票| 黎城县| 兖州市| 锦屏县| 右玉县| 扎兰屯市| 庐江县| 田阳县| 濮阳县| 广饶县| 元氏县| 财经| 宜良县| 禹州市| 舒兰市| 工布江达县| 清镇市| 新余市| 体育|