android httppost 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

private final HashMap> cookieStore = new HashMap<>();

OkHttpClient okHttpClient = new OkHttpClient.Builder()

.cookieJar(new CookieJar() {

@Override

public void saveFromResponse(HttpUrl httpUrl, List list) {

cookieStore.put(httpUrl.host(), list);

}

@Override

public List loadForRequest(HttpUrl httpUrl) {

List cookies = cookieStore.get(httpUrl.host());

return cookies != null ? cookies : new ArrayList();

}

})

.build();

这样就可以解决cookie的问题了,很感谢写这篇文章的人。参考文章:

我继续把我的工具类代码贴出来:

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 params) {

Iterator keys = params.keySet().iterator();

Iterator 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> cookieStore = new HashMap<>();

private static OkHttpClient okHttpClient = new OkHttpClient.Builder()

.cookieJar(new CookieJar() {

@Override

public void saveFromResponse(HttpUrl httpUrl, List list) {

cookieStore.put(httpUrl.host(), list);

}

@Override

public List loadForRequest(HttpUrl httpUrl) {

List cookies = cookieStore.get(httpUrl.host());

return cookies != null ? cookies : new ArrayList();

}

})

.build();

}

android okhttp使用cookie请求就讲完了。

就这么简单。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值