日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android okhttp使用cookie请求

發布時間:2024/4/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android okhttp使用cookie请求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天,簡單講講Android的http使用cookie請求。

現在,做一個功能,出現一個奇怪現象,就是老是登陸成功后,發送請求獲取消息,老是提示我沒有登陸。我自己都不知道是什么原因,這個也是我對網絡通信這塊不了解。請教了其他大神后,終于知道是請求沒有加cookie的問題。這里記錄一下。

Request經常都要攜帶Cookie,上面說過request創建時可以通過header設置參數,Cookie也是參數之一。就像下面這樣:

Request request = new Request.Builder().url(url).header("Cookie", "xxx").build();

然后可以從返回的response里得到新的Cookie,你可能得想辦法把Cookie保存起來。
但是OkHttp可以不用我們管理Cookie,自動攜帶,保存和更新Cookie。
方法是在創建OkHttpClient設置管理Cookie的CookieJar

private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>(); OkHttpClient okHttpClient = new OkHttpClient.Builder().cookieJar(new CookieJar() {@Overridepublic void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {cookieStore.put(httpUrl.host(), list);}@Overridepublic List<Cookie> loadForRequest(HttpUrl httpUrl) {List<Cookie> cookies = cookieStore.get(httpUrl.host());return cookies != null ? cookies : new ArrayList<Cookie>();}}).build();

這樣就可以解決cookie的問題了,很感謝寫這篇文章的人。參考文章:https://www.cnblogs.com/ganchuanpu/p/8075859.html

?

我繼續把我的工具類代碼貼出來:

package com.example.mayn.liushulogindemo.constans;import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List;import okhttp3.Call; import okhttp3.Callback; import okhttp3.Cookie; import okhttp3.CookieJar; import okhttp3.HttpUrl; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody;/*** Created by mayn on 2019/2/12.*/public class HttpUtils {/*** 為HttpGet 的 url 方便的添加多個name value 參數。** @param url* @param params* @return*/public static String attachHttpGetParams(String url, LinkedHashMap<String, String> params) {Iterator<String> keys = params.keySet().iterator();Iterator<String> values = params.values().iterator();StringBuffer stringBuffer = new StringBuffer();stringBuffer.append("?");for (int i = 0; i < params.size(); i++) {String value = null;try {value = URLEncoder.encode(values.next(), "utf-8");} catch (Exception e) {e.printStackTrace();}stringBuffer.append(keys.next() + "=" + value);if (i != params.size() - 1) {stringBuffer.append("&");}}return url + stringBuffer.toString();}public static void HTTP_GET(String url, Callback callback) {//1.創建OkHttpClient對象 // OkHttpClient okHttpClient = new OkHttpClient();//2.創建Request對象,設置一個url地址(百度地址),設置請求方式。Request request = new Request.Builder().url(url).method("GET", null).build();//3.創建一個call對象,參數就是Request請求對象Call call = okHttpClient.newCall(request);//4.請求加入調度,重寫回調方法call.enqueue(callback);}public static void HTTP_POST(String url, RequestBody requestBody, Callback callback) {//1.創建OkHttpClient對象 // OkHttpClient okHttpClient = new OkHttpClient();//2.通過new FormBody()調用build方法,創建一個RequestBody,可以用add添加鍵值對//3.創建Request對象,設置URL地址,將RequestBody作為post方法的參數傳入Request request = new Request.Builder().url(url).post(requestBody).build();//4.創建一個call對象,參數就是Request請求對象Call call = okHttpClient.newCall(request);//5.請求加入調度,重寫回調方法call.enqueue(callback);}private static final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();private static OkHttpClient okHttpClient = new OkHttpClient.Builder().cookieJar(new CookieJar() {@Overridepublic void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {cookieStore.put(httpUrl.host(), list);}@Overridepublic List<Cookie> loadForRequest(HttpUrl httpUrl) {List<Cookie> cookies = cookieStore.get(httpUrl.host());return cookies != null ? cookies : new ArrayList<Cookie>();}}).build();}

android okhttp使用cookie請求就講完了。

?

就這么簡單。

總結

以上是生活随笔為你收集整理的android okhttp使用cookie请求的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。