Request经常都要携带Cookie,上面说过request创建时可以通过header设置参数,Cookie也是参数之一。就像下面这样:

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

然后可以从返回的response里得到新的Cookie,你可能得想办法把Cookie保存起来。
但是OkHttp可以不用我们管理Cookie,自动携带,保存和更新Cookie。
方法是在创建OkHttpClient设置管理Cookie的CookieJar

  1. private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
  2. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  3. .cookieJar(new CookieJar() {
  4. @Override
  5. public void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {
  6. cookieStore.put(httpUrl.host(), list);
  7. }
  8.  
  9. @Override
  10. public List<Cookie> loadForRequest(HttpUrl httpUrl) {
  11. List<Cookie> cookies = cookieStore.get(httpUrl.host());
  12. return cookies != null ? cookies : new ArrayList<Cookie>();
  13. }
  14. })
  15. .build();

这样以后发送Request都不用管Cookie这个参数也不用去response获取新Cookie什么的了。还能通过cookieStore获取当前保存的Cookie。



服务器使用shiro做登录校验及权限验证的时候,app端访问时就要带上cookie,不然请求会提示未登录

  1. private void postAsynHttp() {
  2. mOkHttpClient=new OkHttpClient.Builder()
  3. .cookieJar(new CookieJar() {
  4. private final HashMap<HttpUrl, List<Cookie>> cookieStore = new HashMap<>();
  5.  
  6. @Override
  7. public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
  8. cookieStore.put(url, cookies);
  9. cookieStore.put(HttpUrl.parse("http://192.168.31.231:8080/shiro-2"), cookies);
  10. for(Cookie cookie:cookies){
  11. System.out.println("cookie Name:"+cookie.name());
  12. System.out.println("cookie Path:"+cookie.path());
  13. }
  14. }
  15.  
  16. @Override
  17. public List<Cookie> loadForRequest(HttpUrl url) {
  18. List<Cookie> cookies = cookieStore.get(HttpUrl.parse("http://192.168.31.231:8080/shiro-2"));
  19. if(cookies==null){
  20. System.out.println("没加载到cookie");
  21. }
  22. return cookies != null ? cookies : new ArrayList<Cookie>();
  23. }
  24. })
  25. .build();
  26. RequestBody formBody = new FormBody.Builder()
  27. .add("username", "admin")
  28. .add("password", "admin")
  29. .build();
  30. final Request request = new Request.Builder()
  31. .url("http://192.168.31.231:8080/shiro-2/shiro-login")
  32. .post(formBody)
  33. .build();
  34. Call call = mOkHttpClient.newCall(request);
  35. call.enqueue(new Callback() {
  36. @Override
  37. public void onFailure(Call call, IOException e) {
  38.  
  39. }
  40.  
  41. @Override
  42. public void onResponse(Call call, Response response) throws IOException {
  43. String str = response.body().string();
  44. Log.i("wangshu", str);
  45.  
  46. runOnUiThread(new Runnable() {
  47. @Override
  48. public void run() {
  49. showProgress(false);
  50. Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();
  51. }
  52. });
  53. }
  54.  
  55. });
  56. }

okhttp3带cookie请求的更多相关文章

  1. 带cookie请求数据

    经常会用到一些采集网上的资源,普通网站很好采,get_file_contents()/c_url(). 有的网站会有登陆后才能采集,需要带cookie请求获取(登陆网站相同方法),下面记录一下使用方法 ...

  2. 利用postman进行接口测试并发送带cookie请求的方法

    做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ...

  3. HTTPClient实现免登陆请求(带cookie请求)

    背景: 使用httpClient请求某登录型网站,模拟一个操作,一般步骤一个httpclient模式登录->httpClient模拟操作: 此时发现,每次操作都需要进行一次登录,极其浪费时间,是 ...

  4. WPF带cookie get/post请求网页,下载文件,图片,可保持会话状态

    直接写成啦一个MyNet.cs类方便使用 get/post方法请求 //get请求 MyNet.SendRequest("http://www.baidu.com"); //pos ...

  5. 爬虫学习(八)——带cookie的网页进行爬取

    # 前提:# # 通常,很多网站需要登录才能进行浏览,所以在爬取这些网站时,也需要进行登录,并拿取登录时的cookie# # 登录网页,服务器会给客户端一个牌子cookie# # 访问登录页面时,带着 ...

  6. postman发送带cookie的http请求

    1:需求:测试接口的访问权限,对于某些接口A可以访问,B不能访问. 2:问题:对于get请求很简单,登录之后,直接使用浏览器访问就可以: 对于post请求的怎么测试呢?前提是需要登录态,才能访问接口. ...

  7. postman 请求带cookie

    以亚马逊为例,我抓包随便看一个返回是json数据格式的一个接口,比如随便点一个,我的订单 随便找一条,然后复制url过滤 右键,copy下url 将url放入filter过滤: 在postman里面, ...

  8. urllib2 post请求方式,带cookie,添加请求头

    #encoding = utf-8 import urllib2import urllib url = 'http://httpbin.org/post'data={"name": ...

  9. PostMan 使用Interceptor 发送带cookie的请求一直loading

    问题 最近要写一个爬虫(虽然是第一次写),于是就用了Chrome上非常方便一个插件,PostMan,但是由于chrome安全的限制,发不出带cookie和带有自定义头部标签的请求. 百度一番后得如果想 ...

随机推荐

  1. ajax--底层代码

    ajax:Asynchronous JavaScript And XML,异步的js与XML.ajax并不是一种新的编程语言,而是一种使用现有标准的新方法.ajax能够在不重载整个网页的情况下与服务器 ...

  2. github的本地配置和项目创建

    之前完成了github的安装和账号的注册,接下来要进行项目的创建和本地代码仓库的建立 1.创建项目 2.填写项目相关信息 注意:在给项目起名时,尽量起一些有意义的名字,否则会被管理员删除.因为服务器上 ...

  3. android Service 学习总结

    学习android开发已经四五个月,由于项目中职责的原因一直没有接触过Service的实际项目,今天重新学一遍Service用法. 问题: 作为四大组件,为什么需要Service? 它与Thread又 ...

  4. Android Studio启动速度慢的问题。

    Android Studio每次启动都要去fetching sdk,由于Android sdk 官网在大陆连不上,所以每次启动时界面都会停在那里很久. 要提高启动速度,就要避免每次启动Android ...

  5. Struts 2初体验

    Struts2简介: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数 ...

  6. 为android游戏开发-准备的地图编辑器-初步刷地图

    采用多文理混合,单页面支持8张文理进行刷绘

  7. Golang gRPC 和 gRPC-gateway 结合使用

    一.安装 go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway go get -u github.com/g ...

  8. my97datePicker的相信使用

    http://www.my97.net/dp/demo/resource/2.1.asp

  9. UUID生成随机数工具类

    package com.qiyuan.util; import java.util.UUID; public class RanNum { /** * 生成随机数<br> * GUID: ...

  10. APP消息推送机制的实现(PUSH)

    出于好奇,想了解一下消息推送机制,在网上搜索到了几篇文章,感觉还不错,粘贴下来,等真正用到的时候再仔细研究 以下两篇是关于ios的 1.http://blog.csdn.net/xyxjn/artic ...