【问题标题】:Skip sending cookies in request, but maintain cookies跳过在请求中发送 cookie,但维护 cookie
【发布时间】:2014-01-03 13:21:23
【问题描述】:

有没有一种简单的方法可以确保 HttpClient 在请求期间不发送 cookie,而不删除所有 cookie。

通过做:

httpClient.getCookieStore().clear();

cookies 没有被发送,这很好。 但是对于其他请求(我需要这些 cookie),我不想再次获取新的 cookie。

【问题讨论】:

  • 我不知道android,但是你可以访问localStorage 选项吗?或内部数据库以“备份”cookie。另一种解决方案是使 cookie 仅对某个路径有效(并在另一个路径中发出没有 cookie 的请求)
  • 嗨,很好的建议,但不幸的是不适用于我的问题。并且不应该考虑手动更新和处理数据库中的cookie。
  • 我觉得没有别的办法了。因为这是cookie的概念。您还可以为无 cookie 请求设置另一个域。这是非常大的系统(facebook、google 等)中静态图像的技巧

标签: android cookies request httpclient


【解决方案1】:

您可以尝试为该特定请求手动设置请求的 Cookie 标头

request.setHeader("Cookie","");

编辑: 因此,如果不工作,另一种方法可能是尝试向该 HttpClient 实例添加一个空的 cookie 存储,所以理论上你将有一个空的 cookie 存储

// Create a local instance of cookie store
CookieStore cookieStore = new BasicCookieStore();
// Add the created cookieStore to the http client instance
httpClient.setCookieStore(cookieStore);

【讨论】:

  • 试过这个没有任何运气。似乎 httpClient 会自动为域添加 cookie,即使我们在 header 中添加空 cookie。
【解决方案2】:

我的回答是基于假设您使用的是 Apache HttpClient 版本 4.x。

默认情况下,HttpClient 4.x 为负责 HTTP 状态管理的协议处理管道引入了两个协议拦截器:RequestAddCookiesResponseProcessCookies。您想要的是删除RequestAddCookies,同时保留ResponseProcessCookies

这就是 HttpClient 4.3 的实现方式

CloseableHttpClient httpclient = HttpClients.custom()
        .disableCookieManagement()
        .addInterceptorFirst(new ResponseProcessCookies())
        .build();

还有其他方法可以实现相同的结果,例如使用自定义协议拦截器从所有传出请求中删除 cookie 标头,但删除 RequestAddCookies 是最有效的。

【讨论】:

    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 2012-09-22
    • 2017-01-27
    • 1970-01-01
    • 2019-11-06
    • 2012-10-13
    • 2013-06-08
    • 1970-01-01
    相关资源
    最近更新 更多