如何在Retrofit请求里添加Cookie

Posted 扈扈哈嘿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Retrofit请求里添加Cookie相关的知识,希望对你有一定的参考价值。

你可以自定义一个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;
          
        
      
    
  

以上是关于如何在Retrofit请求里添加Cookie的主要内容,如果未能解决你的问题,请参考以下文章

Retrofit 获取、设置cookie

[如何在Webview和Retrofit2 Okhttp3之间共享cookie

Android Retrofit2&OkHttp3添加统一的请求头Header

Retrofit网络框架介绍

Android 使用Retrofit2.0+OkHttp3.0实现缓存处理+Cookie持久化第三方库

如何使用Retrofit请求非Restful API