【发布时间】:2015-10-25 13:50:00
【问题描述】:
我们正在编写一个 J2EE Java servlet,它作为浏览器客户端和另一个服务器之间的代理。我们在 servlet 中使用 httpclient 4.1 代码,充当浏览器请求和其他服务器调用之间的代理。这是问题的主要部分,httpclient 4.1 将返回用于下一组请求的 cookie,但它不会返回 cookie,因为它们完全是从服务器返回的。是否可以在 httpclient 中从服务器获取“真实的”“set-cookie”标头信息。
例如(这里是在 servlet 级别设置的代码的伪代码):
DefaultHttpClient httpClient = new DefaultHttpClient();
// Connect to another server //
List list = httpClient.getCookieStore().getCookies();
cookie 列表是(我相信)下一组请求所需的 cookie,但不是来自服务器的 cookie 的确切表示。
例如,如果服务器响应:
Set-Cookie: myval=;
...
在getCookies的列表中,列表为空。因为我们正在尝试创建一个代理调用,我们不希望列表为空,我们可以发送 myval=;从 servlet 返回到浏览器客户端。
当 httpclient 处理响应时,是否可以注入某种监听器?或者 httpclient 是否对所有返回的“set-cookie”值进行了 api 调用?此外,当连接到服务器时,我们可能会遇到重定向,我们还希望收集那里的所有 set-cookie 调用。
编辑:基本上当使用 httpclient 向另一台服务器发出请求时,对 httpclient 的调用包括重定向。是否可以沿重定向路径收集cookie信息。
【问题讨论】:
-
问题,为什么不使用 servlet 来重定向请求并检索 cookie?
-
它确实与涉及向内部 REST 服务发出请求的应用程序用例相关联。 servlet-httpclient 代码之间连接的服务器在 Internet 上不可用。浏览器不可用。
-
为什么不能使用 RequestDispatcher 来重定向请求?我问这个是因为我们有一个类似的用例,我们需要从传入请求中读取 cookie,然后将其重定向到不同的 servlet。
-
请求调度程序如何连接到具有不同主机名的其他服务器? Httpclient 在这种情况下工作正常,问题是关于 httpclient。不是 servlet/j2ee 部分。
-
CloseableHttpResponse 中的
getHeader或getAllHeader方法呢?我正在使用 HttpClient 4.4.1
标签: java servlets cookies proxy