Post Request работает с curl, но не в java, используя HttpsURLConnection - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь зайти на веб-сайт с учетными данными своей учетной записи с помощью почтового запроса.Когда я использую curl для выполнения моего почтового запроса, все работает, но когда я пытаюсь реализовать его в Java с HttpURLConnection, это не так.

Когда я отправляю почтовый запрос с Content-Type: application/x-www-form-urlencoded какзаголовок и username=USERNAME&password=PASSWORD в качестве моей полезной нагрузки на https://******.de/login/index.php ответ содержит Set-Cookie: Session=sodfsgpc0uefhn4sdfucnau2; path=/.

Если я сейчас беру этот идентификатор сеанса и устанавливаю его в качестве файла cookie для аутентификации, он работает с идентификатором сеансазапрос curl, но не с запросом java.

CURL :

curl -v -H "Content-Type: application/x-www-form-urlencoded" --data "username=USERNAME&password=PASSWORD" https://******.de/login/index.php

Java

String loginData = "username=USERNAME&password=PASSWORD";
URL url = new URL(LOGIN_URL);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();

connection.setRequestMethod("POST");
connection.addRequestProperty("Accept", "*/*");
connection.addRequestProperty("Host", "******.de");
connection.addRequestProperty("Content-Length", String.valueOf(loginData.length));
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("User-Agent", "curl/7.55.1");

connection.setDoOutput(true);
OutputStream out = connection.getOutputStream();
out.write(loginData);
out.flush();
out.close();

connection.getInputStream().close();

System.out.println(connection.getHeaderField("Set-Cookie").split(";")[0]);

Как вывидно, что я пытался использовать те же заголовки, что и в curl, но даже тогда это не работает.

1 Ответ

0 голосов
/ 21 января 2019

После некоторой дополнительной работы я выяснил, что сайт login.php перенаправляет запрос на другую страницу, которая делает недействительным ваш идентификатор сеанса, если вы не запрашиваете его с идентификатором сеанса, возвращенным login.php.

Звонок connection.setFollowRedirects(false); исправил это для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...