android - 如何在 Retrofit 中检索 cookie?

标签 android cookies retrofit

我阅读了有关请求拦截器的内容,但不知道如何真正使用它们来获取 cookie...我正在从 nodejs 中像这样发送 cookie...

res.cookie('userid', user._id, { maxAge: 86400000, signed: true, path: '/' });

并且在我的 android 客户端中 - 到目前为止我已经为我的 RestApiManager 设置了这个

public class RestApiManager {
  private static final String API_URL = "ip: port";

    private static final RestAdapter REST_ADAPTER = new RestAdapter.Builder()
            .setEndpoint(API_URL)
            .setLogLevel(RestAdapter.LogLevel.FULL)
            .build();

    //Call interface
    public interface AsynchronousApi {
  //Login User
        @FormUrlEncoded
        @POST("/login")
        public void loginUser(
                @Field("loginName") String loginName,
                @Field("password") String password,
                Callback<UserResponse> callback);
//Profile Picture
        @Multipart
        @POST("/profilePicture")
        public void uploadProfilePicture(
                @Part("photo") TypedFile photo,
                @Part("userId") String userId,
                Callback<UserResponse> callback); //success thumbnail to picasso

    }
    //create adapter
    private static final AsynchronousApi ASYNCHRONOUS_API = REST_ADAPTER.create(AsynchronousApi.class);

    //call service to initiate
    public static AsynchronousApi getAsyncApi() {
        return ASYNCHRONOUS_API;
    }
}

单独的 cookie 类:

    public class ApiCookie implements RequestInterceptor{
    // cookie use
    private String sessionId;

    public ApiCookie() {

    }

    //COOKIE BELOW
    public void setSessionId(String sessionId) {
        this.sessionId = sessionId;
    }

    public void clearSessionId() {
        sessionId = null;
    }


    @Override
    public void intercept(RequestFacade requestFacade) {
        setSessionId();
    }
}

试图弄清楚如何获取 cookie 并能够在以后的请求中发送它,这样我就不需要包含 userId 字段?

最佳答案

我在我的应用程序中遇到了类似的情况。该解决方案适用于我使用 Retrofit 检索 cookie。 MyCookieManager.java

import java.io.IOException;
import java.net.CookieManager;
import java.net.URI;
import java.util.List;
import java.util.Map;

class MyCookieManager extends CookieManager {

    @Override
    public void put(URI uri, Map<String, List<String>> stringListMap) throws IOException {
        super.put(uri, stringListMap);
        if (stringListMap != null && stringListMap.get("Set-Cookie") != null)
            for (String string : stringListMap.get("Set-Cookie")) {
                if (string.contains("userid")) {
                    //save your cookie here
                }
            }
    }
}

以下是如何使用 RequestInterceptor 为 future 的请求设置 cookie:

 MyCookieManager myCookieManager = new MyCookieManager();
            CookieHandler.setDefault(myCookieManager);
 private static final RestAdapter REST_ADAPTER = new RestAdapter.Builder()
            .setEndpoint(API_URL)
            .setLogLevel(RestAdapter.LogLevel.FULL)
                    .setRequestInterceptor(new RequestInterceptor() {
                        @Override
                        public void intercept(RequestFacade requestFacade) {
                            String userId = ;//get your saved userid here
                            if (userId != null)
                                requestFacade.addHeader("Cookie", userId);
                        }
                    })
            .build();

关于android - 如何在 Retrofit 中检索 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22425993/

相关文章:

android - 在具有相对布局父级的 fragment 中使用持久性 Bottom Sheet

android - Android 应用中的语音检测

android - Retrofit 2 在生产中返回 null

java - 如何在 OkHttp 响应中更改正文?

android - MalformedJsonException : Use JsonReader. setLenient(true) 在第 1 行第 1 列路径中接受格式错误的 JSON

javascript - Android Studio React Native 构建失败

java - java可序列化的问题

google-chrome - jQuery跨域ajax请求不发送cookie

python - GAE : Setting multiple cookies (or a multi-value cookie) with SimpleCookie

javascript - Firebase 身份验证 Javascript : setCookie for pending Credential for redirect