У меня работает этот код:
Получение формы входа в систему (в моем случае cookie-файл фактически устанавливается при получении страницы входа в систему)
URL url = new URL(formPage);
URLConnection conn = url.openConnection();
String cookieHeader = conn.getHeaderFields().get("Set-Cookie").get(0);
Matcher m = JSESSION_PATTERN.matcher(cookieHeader);
m.find();
jSessionId = m.group(1);
Мне также нужно получить значение csrf, но сейчас я его опущу.
Затем я авторизируюсь, выполнив:
URL url = new URL(formPage);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Cookie", "JSESSIONID=" + encode(jSessionId, "UTF-8"));
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.writeBytes(String.format("_csrf_token=%s&xyz=%s&zyx=%s",
encode(csrfToken, "UTF-8"),
encode(USER, "UTF-8"),
encode(PASS, "UTF-8")));
out.close();
// I have absolutely no idea why this is needed.
conn.getInputStream().close();
String cookieHeader = conn.getHeaderFields().get("Set-Cookie").get(0);
Matcher m = JSESSION_PATTERN.matcher(cookieHeader);
m.find();
jSessionId = m.group(1);
Затем я могу получать и обрабатывать страницы, используя
URL url = new URL(thePage);
URLConnection conn = url.openConnection();
conn.setRequestProperty("Cookie", "JSESSIONID=" + encode(jSessionId, "UTF-8"));
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String str;
while ((str = in.readLine()) != null) {
// process str...
Надеюсь, это поможет!