在标准的 oracle 实现中,HttpURLConnection
获取构造函数的默认值CookieHandler
,因此这是一种可能的解决方案。创建一个同步的单例工厂,HttpURLConnections
为每个应用程序创建一个特定的管理器。在我看来不是个好主意。
其他坏主意是提供您自己的方法CookiePolicy
并使用该shouldAccept
方法。
或者,您可以手动控制应用程序上不应共享的 cookie CookieHandler
:
HttpURLConnection firstCall = (HttpURLConnection) new URL("http://www.google.com").openConnection();
firstCall.connect();
List<HttpCookie> cookieList = HttpCookie.parse(firstCall.getHeaderField("Set-Cookie"));
firstCall.disconnect();
StringBuilder cookies = new StringBuilder();
for(HttpCookie cookie:cookieList) {
//if(cookie.SOME_VALIDATION) {
if(cookies.length() > 0) {
cookies.append("; ");
}
cookies.append(cookie.toString());
//}
}
HttpURLConnection secondCall = (HttpURLConnection) new URL("http://www.google.com").openConnection();
secondCall.setRequestProperty("Cookie", cookies.toString());
secondCall.connect();
//dosomething
secondCall.disconnect();