首页 > 解决方案 > 在 Apache Components HttpClient 中设置 cookie 但无法在 HttpServletRequest 中的服务器上检索

问题描述

我正在向 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 命中本地 url 正确连接到本地主机上的 Rest 端点,但是当我尝试使用下面的代码检索 cookie 时

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

我得到空值。

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

标签: javacookiesapache-httpclient-4.x

解决方案


我自己想通了,实际上我在连接到 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。


推荐阅读