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请求相关推荐
- android网络请求撤销,Android OkHttp + Retrofit 取消请求的方法
前言 在某一个界面,用户发起了一个网络请求,因为某种原因用户在网络请求完成前离开了当前界面,比较好的做法是取消这个网络请求.对于OkHttp来说,具体是调用Call的cancel方法. 如何找到这一个 ...
- Android—OkHttp同步异步请求过程源码分析与拦截器
OkHttp同步请求步骤: 创建OkHttpClient,客户对象 创建Request,请求主体,在请求主体设置请求的url,超时时间等 用newCall(request)将Reuqest对象封装成C ...
- android 设置允许http请求_网络请求框架----OkHttp原理
一.前言 在 Android 中,网络请求是一个必不可少的功能,因此就有许多代表网络请求客户端的组件库,具有代表性的有下面三种: Apache 的 HTTP 客户端组件 HttpClient. Jav ...
- Android okHttp网络请求之缓存控制Cache-Control
前言: 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优先加载本地缓存,基于这个需求我们来学习一直okHttp的Cache-Control. okHttp ...
- 详解 Android okhttp 网络请求get,post传输数据的基本用法
官网网址:http://square.github.io/okhttp/ github地址:https://github.com/square/okhttp OKHttp优点 1.支持HTTP2/SP ...
- 一个整合OkHttp 、Retrofit 、Volley 、RxJava、Novate多种开源网络框架的项目,高度的封装和集成,Android中Web网络请求一行代码解决
一个整合OkHttp .Retrofit .Volley .RxJava.Novate多种开源网络框架的项目,高度的封装和集成,Android中Web网络请求一行代码解决 AndroidHttp 一个 ...
- Android OkHttp框架解析
Okhttp是由Sqare公司开发的开源网络访问库,是目前比较火的网络框架, 它处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复.如果你的服务器配置了多个IP地址,当第一个IP连接失败的时候, ...
- Android OkHttp完全解析 是时候来了解OkHttp了
Android OkHttp完全解析 是时候来了解OkHttp了 标签: AndroidOkHttp 2015-08-24 15:36 316254人阅读 评论(306) 收藏 举报 分类: [an ...
- Android OkHttp 源码解析 - 拦截器
一.前言 看一下 RealCall 中的拦截器排序: Response getResponseWithInterceptorChain() throws IOException {// Build a ...
最新文章
- Android选项卡置底的方法
- VisualStudioCode下载安装与安装中文插件教程(图文教程)
- Spring Boot集成Thymeleaf模板引擎
- C 程序的存储空间记录
- 龙芯发布.NET 6.0.100开发者内测版
- Kubernetes tutorial - K8S 官方入门教程
- 使用SQL Server存储ASP.NET Session变量
- sql中根据逗号分隔,查出多行数据
- Java基础:Collections集合、Map集合综合案例 —— 斗地主
- Linux下conda 安装以后 activate无法使用
- mac navicat 安装
- 2016 年全国房价会呈什么趋势?
- 七战DTCC铸成ACE Director 去哪儿网周彦伟畅聊数据库的十八般武艺
- WinEdit初使用
- yd什么意思_excel中yd是什么意思
- CATransform3D 矩阵 m11–m44每个的含义
- 当阿里云服务器 ECS 访问不了公网 ip可能存在的原因以及如何解决的办法
- matlab mag函数,频谱分析函数
- 小车红外线自主充电方案-2
- 一元二次方程java实现代码