【问题标题】:Setting a cookie in Apache Components HttpClient but unable to retrieve at the server in HttpServletRequest在 Apache Components HttpClient 中设置 cookie 但无法在 HttpServletRequest 中的服务器上检索
【发布时间】:2020-11-09 15:25:37
【问题描述】:

我正在向 Closeable HttpClient 对象添加一个 cookie,并尝试在服务器上检索它,如下所示。

BasicClientCookie mCookie = new BasicClientCookie("myCookie", "dummyValue");
    mCookie.setDomain(".myCookie.net");
    mCookie.setPath("/");
    mCookie.setSecure(true);
    mCookie.setAttribute(ClientCookie.PATH_ATTR, "/");
    mCookie.setAttribute(ClientCookie.DOMAIN_ATTR, ".myCookie.net");
    mfCookies[0] = mCookie;

    BasicCookieStore basicCookieStore = new BasicCookieStore();
    basicCookieStore.addCookies(mfCookies);

    CloseableHttpClient httpClient = HttpClients.custom()
        .setDefaultRequestConfig(
            RequestConfig.custom().setConnectTimeout(connectionTimeOut).build())
        .setDefaultCookieStore(basicCookieStore)
        .setConnectionManager(poolingConnectionManager)
        .build();

我使用 HttpGet 对象连接到本地 url,如下所示

httpGet = new HttpGet(myLocalUrl);
httpResponse = httpClient.execute(httpGet);

HttpClient 正确连接到本地主机上的 Rest 端点的本地 url,但是当我尝试使用下面的代码检索 cookie 时

(HttpServletRequest) request.getCookies() ;//returns null

我得到空值。

有人可以帮忙吗 - 我正在使用 spring boot 来创建一个 Rest 端点(服务器)并尝试检索 cookie。

【问题讨论】:

    标签: java cookies apache-httpclient-4.x


    【解决方案1】:

    我自己想通了,实际上我在连接到 http://localhost:8080/... 时将域设置为 .myCookie.net,如果在本地运行,则 localhost 应该解析为域名通过 dns 所以在这种情况下 .myCookie.net 应该映射到文件 /etc/hosts 文件中的 localhost。 例如在 etc/hosts 文件中设置 127.0.0.1 www.myCookie.net 并点击 url http://www.myCookie.net/..

    如果 httpclient 连接的 url 和 cookie 中设置的域不匹配,httpclient 将丢弃 cookie。

    【讨论】:

      猜你喜欢
      • 2018-10-02
      • 2019-04-23
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2014-05-31
      • 2015-07-21
      相关资源
      最近更新 更多