Я пытаюсь отправить запрос POST для формы входа в систему «http://localhost/cilogin/login/» и получить заголовки ответов из соединения URL-адреса JAVA. Сама форма входа получает перенаправление после входа в систему «http://localhost/cilogin/login/success».java post form и получить заголовки ответов после перенаправления
Я пытаюсь обнаружить перенаправление HTTP 302 через JAVA. Но я получаю HTTP 200 только в заголовках ответов, которые я выбрал. Это как если JAVA игнорирует перенаправление. Пожалуйста, помогите. Код приведен ниже:
private boolean doLogin(String pass) throws IOException
{
String url ="http://localhost/cilogin/login/";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setInstanceFollowRedirects(true); //you still need to handle redirect manully.
HttpURLConnection.setFollowRedirects(true);
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Accept-Charset", "UTF-8");
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
con.connect();
String charset = "UTF-8"; // Or in Java 7 and later, use the constant: java.nio.charset.StandardCharsets.UTF_8.name()
String param1 = "pd";
String param2 = pass;
// ...
String query = String.format("log=%s&pwd=%s&Sub=login",
URLEncoder.encode(param1, charset),
URLEncoder.encode(param2, charset));
OutputStream output = con.getOutputStream();
output.write(query.getBytes(charset));
int responseCode = con.getResponseCode();
System.out.println("PASS= "+pass+" code = "+responseCode);
Map<String, List<String>> map = con.getHeaderFields();
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
String key = entry.getKey();
String val = entry.getValue().get(0);
if(responseCode == 302 && key.equals("Location") && val.equals("http://localhost/cilogin/login/success"))
{
con.disconnect();
return true;
}
}
con.disconnect();
return false;
}
Java Response является:
PASS= abc code = 200
Здесь "а" является строка передается метода doLogin от внешнего
Также возможно, что ваша клиентская библиотека http обрабатывает перенаправление, так что вы просто видите 200 на последнем запросе после повторного непосредственный. – redge
Согласен. Например, библиотека HttpClient от Apache также автоматически обрабатывает перенаправления GET. Существуют ли стратегии перенаправления, которые вы можете настроить для своей библиотеки HttpClient? – fishi
Существует опция в библиотеке HttpClient Apache http://hc.apache.org/httpcomponents-client-4.2.x/tutorial/html/httpagent.html#d5e1169, чтобы получить код состояния, перенаправляется –