gpt4 book ai didi

android - 如何在 Retrofit 中检索 cookie?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:41:58 24 4
gpt4 key购买 nike

我阅读了有关请求拦截器的内容,但不知道如何真正使用它们来获取 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com