gpt4 book ai didi

android - 如何防止 Retrofit 清除我的 cookie

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:31 28 4
gpt4 key购买 nike

我从我的后端 API 获得了一个 cookie,它允许我验证所有后续的用户请求。我正在使用改造,但无法在请求之间保留 session key 。我想知道如何配置改造,以便它保留 session key 并将其用于所有 future 的请求:

public class ApiClient{

private static final String API_URL = "http://192.168.1.25:8080";

private static RestAppApiInterface sRestAppService;

public static RestAppApiInterface getRestAppApiClient() {
if (sRestAppService == null) {

CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(cookieManager);

RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(API_URL)
.build();
sRestAppService = restAdapter.create(RestAppApiInterface.class);
}
return sRestAppService;
}

}

最佳答案

需要设置一个Cookie持久化Client。由于您使用的是 Android 和改造我建议使用 OKHttp 更好地支持改造和 Android 线程安全,方法如下

//First create a new okhttpClient (this is okhttpnative)
OkHttpClient client = new OkHttpClient(); //create OKHTTPClient
//create a cookieManager so your client can be cookie persistant
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
client.setCookieHandler(cookieManager); //finally set the cookie handler on client

//OkClient is retrofit default client, ofcourse since is based on OkHttClient
//you can decorate your existing okhttpclient with retrofit's okClient
OkClient serviceClient = new OkClient(client);

//finally set in your adapter
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("Some eNdpoint")
.setClient(serviceClient)
.build();

使用 Okhttp 而不是 defaultHttpClient(由 apache)的要点是 okhttp 对 android 来说是线程安全的,并且可以通过改造得到更好的支持。

请记住,如果您创建另一个适配器,您将需要设置相同的客户端,也许如果您在客户端实例上实现单例,您将对所有请求使用相同的适配器,保持在相同的上下文中

我希望这对你有帮助,最好

关于android - 如何防止 Retrofit 清除我的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23879567/

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