android okhttp使用cookie请求
生活随笔
收集整理的這篇文章主要介紹了
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
這樣就可以解決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请求的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 设置TextView字体
- 下一篇: android 禁止Viewpager左