9

伙计们,我正在使用改造,我想知道如何透明地处理会话 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 扩展)?

4

1 回答 1

13

从 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 实现。

于 2013-09-22T20:35:45.097 回答