如何在Retrofit请求里添加Cookie

原创 2016年05月31日 16:26:51

你可以自定义一个RequestIntercaptor:

String cookieKey = ...
String cookieValue = ...

RestAdapter adapter = new RestAdapter.Builder()
    .setRequestInterceptor(new RequestInterceptor() {
      @Override
      public void intercept(RequestFacade request) {
        // assuming `cookieKey` and `cookieValue` are not null 
        request.addHeader("Cookie", cookieKey + "=" + cookieValue);
      }
    })
    .setServer("http://...")
    .build();

YourService service = adapter.create(YourService.class);

从服务器读取cookies再交给cookie manager管理:

OkHttpClient client = new OkHttpClient();
CustomCookieManager manager = new CustomCookieManager();
client.setCookieHandler(manager);

RestAdapter adapter = new RestAdapter.Builder()
    .setClient(new OkClient(client))
    ...
    .build();

CustomeCookieManager如下:

public class CustomCookieManager extends CookieManager {

  // The cookie key we're interested in.    
  private final String SESSION_KEY = "session-key";

  /**
   * Creates a new instance of this cookie manager accepting all cookies.
   */
  public CustomCookieManager() {
    super.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
  }

  @Override
  public void put(URI uri, Map<String, List<String>> responseHeaders) throws IOException {

    super.put(uri, responseHeaders);

    if (responseHeaders == null || responseHeaders.get(Constants.SET_COOKIE_KEY) == null) {
      // No cookies in this response, simply return from this method.
      return;
    }

    // Yes, we've found cookies, inspect them for the key we're looking for.
    for (String possibleSessionCookieValues : responseHeaders.get(Constants.SET_COOKIE_KEY)) {

      if (possibleSessionCookieValues != null) {

        for (String possibleSessionCookie : possibleSessionCookieValues.split(";")) {

          if (possibleSessionCookie.startsWith(SESSION_KEY) && possibleSessionCookie.contains("=")) {

            // We can safely get the index 1 of the array: we know it contains
            // a '=' meaning it has at least 2 values after splitting.
            String session = possibleSessionCookie.split("=")[1];

            // store `session` somewhere

            return;
          }
        }
      }
    }
  }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

Retrofit2.0 ,OkHttp3完美同步持久Cookie实现免登录(二)

通过对Retrofit2.0的基础入门和案例实践,掌握了怎么样使用Retrofit访问网络,加入自定义header,包括加入SSL证书,基本的调试基础,但是正常的开发中会涉及cookie同步问题,可以...
  • sk719887916
  • sk719887916
  • 2016年06月17日 16:00
  • 17736

Retrofit+OKHttp 教你怎么持久化管理Cookie

绪论最近小编有点忙啊,项目比较紧,所以一直在忙活项目,继之前的自定义组件之后就没再写博客了,如果你没看到之前的自定义组件你可以看一下: Android自定义下拉刷新动画–仿百度外卖下拉刷新 And...
  • lyhhj
  • lyhhj
  • 2016年05月08日 13:46
  • 26239

Retrofit——Cookie

今天学习了有关http的cookie知识后,刚好想结合retrofit来试验一下学习成果,于是拿了别人的接口来做实验。要想获取cookie,那么肯定有个入口区提供cookie,一般都是在app应用的第...
  • qqyanjiang
  • qqyanjiang
  • 2016年04月27日 20:40
  • 4969

Retrofit实现持久化Cookie的三种方案

在上一文中,我们提到retrofit 2.0中如何实现非持久化cookie的两种方案,但并未做过深的解释。 现在我们重点关注JavaNetCookieJar实现非持久化cookie背后的原理,最终找出...
  • dd864140130
  • dd864140130
  • 2016年09月17日 00:13
  • 6419

Retrofit在客户端保持Cookie(服务器的Token验证)

移动端项目和网站还是多多少少的区别的,拿这个用户登陆过期验证这个流程来说吧,一般的网站是不会做处理的,他们访问的时候会自动验证Cookie的有效期的,移动端这样处理就不行的,他是不会保存Cookie的...
  • u014752325
  • u014752325
  • 2016年12月10日 14:24
  • 5333

Retrofit Token过期自动刷新并重新请求接口

在有心课堂的群里,有网友提出如下场景: 当前开发的 App 遇到一个问题: 当请求某个接口时,由于 token 已经失效,所以接口会报错。 但是产品经理希望 app 能够马上刷新 ...
  • jdsjlzx
  • jdsjlzx
  • 2016年09月05日 17:35
  • 10281

Android AsyncHttpClient登录保存cookie和读写cookie

AsyncHttpClient有个特性: (11)持久化cookie存储,可以将cookie保存到你的应用程序的SharedPreferences中 AsyncHttpClient Cookie...
  • jdsjlzx
  • jdsjlzx
  • 2015年03月28日 13:59
  • 22929

在Android WebView中设置Cookie

package com.test.myapplication; import android.app.Activity; import android.content.Context; import...
  • brook19
  • brook19
  • 2016年09月07日 10:38
  • 3735

Android中与服务器共享cookie的实现

一、实现步骤: (1)创建一个类(类的名字进行自定义) (2)把类进行使用单例模式进行封装,并使用HttpClient进行获取请求登录接口的Cookie,以及登录后返回的json数据 (3)将c...
  • liu_jing_hui
  • liu_jing_hui
  • 2016年11月30日 10:28
  • 883

Android http请求类添加Cookie

package com.easyder.util; import java.io.IOException; import java.io.UnsupportedEncodingException; ...
  • u014051380
  • u014051380
  • 2014年03月12日 21:40
  • 2200
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在Retrofit请求里添加Cookie
举报原因:
原因补充:

(最多只允许输入30个字)