When using Java in an app server environment, of course, you can read the cookies.
Is it possible to read cookies from a Java Standalone program? Often the next example is shown. When running, no cookies are listed.
public class CookiesReader {
public static void main(String[] args) {
CookieManager manager = new CookieManager();
manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(manager);
try {
URL url = new URL("https://nu.nl");
URLConnection connection = url.openConnection();
connection.getContent();
CookieStore cookieJar = manager.getCookieStore();
List<HttpCookie> cookies = cookieJar.getCookies();
for (HttpCookie cookie : cookies) {
System.out.println("CookieHandler retrieved cookie: " + cookie);
}
} catch ( Exception e) {
e.printStackTrace();
}
}
}
SOLUTION: thanks to Sotirios Delimanolis
The steps are: open connection > get access to the header fields > access the "Set-Cookie" attribute > parse the cookie stuff.
public class CookiesReader {
static final String COOKIES_HEADER = "Set-Cookie";
public static void main(String[] args) {
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
try {
URL url = new URL("https://google.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.getContent();
Map<String, List<String>> headerFields = connection.getHeaderFields();
List<String> cookiesHeader = headerFields.get(COOKIES_HEADER);
if (cookiesHeader != null) {
for (String cookie : cookiesHeader) {
try {
cookieManager.getCookieStore().add(null, HttpCookie.parse(cookie).get(0));
} catch( Exception e) {
e.printStackTrace();
}
}
}
if (cookieManager.getCookieStore().getCookies().size() > 0) {
for (HttpCookie ck : cookieManager.getCookieStore().getCookies()) {
System.out.println("Cookie name: " + ck.getName());
System.out.println("Domain: " + ck.getDomain());
System.out.println("Max age: " + ck.getMaxAge());
System.out.println("Server path: " + ck.getPath());
System.out.println("Is secured: " + ck.getSecure());
System.out.println("Cookie value: " + ck.getValue());
System.out.println("Cookie protocol version: " + ck.getVersion());
}
}
} catch ( Exception e) {
e.printStackTrace();
}
}
}