使用带有 Cookie 持久性的改造
Posted
技术标签:
【中文标题】使用带有 Cookie 持久性的改造【英文标题】:using retrofit with Cookie persistence 【发布时间】:2013-09-24 12:42:42 【问题描述】:伙计们,我正在使用改造,我想知道如何透明地处理会话 cookie。 为此,我扩展了给定的 ApacheClient 并在对 ApacheClient.execute(HttpClient, HttpUriRequest) 的自定义调用中使用 CookieStore :
Client client = new ApacheClient()
final CookieStore cookieStore = new BasicCookieStore();
@Override
protected HttpResponse execute(HttpClient client, HttpUriRequest request) throws IOException
// BasicHttpContext is not thread safe
// CookieStore is thread safe
BasicHttpContext httpContext = new BasicHttpContext();
httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
return client.execute(request, httpContext);
;
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer(API_URL)
.setClient(client)
.build();
有没有更好的方法来使用内置的改造 API(没有 HttpClient 扩展)?
【问题讨论】:
这个答案对你有帮助吗? 不,我需要一个使用改造 API 的跨 HTTP 实现解决方案,如果它存在/但不是 android 的...... 你知道如何实现 cookie 吗? 我仍在使用 BasicCookieStore 和 ApacheClient,但使用 colriot 答案更好,因为您可以使用来自 square (github.com/square/okhttp) 的 Okhttp 【参考方案1】:从 API 9 开始,您拥有 java.net.CookieManager
并且可以像这样设置系统范围的 cookie 处理程序:
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(cookieManager);
是的,Apache Http 客户端使用自己的 cookie 处理机制。但这应该不是问题,因为从 API 9 HttpURLConnection 开始推荐使用 HTTP 客户端。 如果您使用 Square 的 Retrofit,您可能还喜欢他们的 OkHttp 库 - 具有许多有用功能的自定义 URLConnection 实现。
【讨论】:
你可以在改造中使用它吗?如果我在我的登录片段上调用它,我可以期望从改造中进行的每个调用都会自动附加 cookie 吗? @Lion789 是的,你可以。但最好将此代码放入您的自定义Application
继任者中。
按应用程序继任者您指的是什么?即这就是我想要做的......@ 987654321@ ---另外,对于accept_all,最好让它成为默认的原始服务器,或者不会让我得到cookie,如果是这样,那么我是否需要做任何额外的事情,因为据我所知,我可以忽略该行,因为它是默认的?
@Lion789 我的意思是Application
类的子类。例如,在其onCreate
方法中。
这对我有用,显然没有这个 OkHttp 将不会保存服务器请求设置的任何 cookie(Set-Cookie 标头),但您需要记住使用单个 http 客户端例如,我在 dagger 的帮助下使用 Singleton 解决了这个问题。以上是关于使用带有 Cookie 持久性的改造的主要内容,如果未能解决你的问题,请参考以下文章
在带有 express-session 的 NodeJS 中使用安全 cookie 时会话不持久