Ошибка запроса POST Jsoup. Ошибка HTTP при получении URL. Статус = 400 - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь зайти на сайт (https://dashboard.ngrok.com/user/login) с помощью jsoup. У меня не было проблем с GET-запросом, но когда я пытаюсь выполнить POST-запрос с использованием учетных данных, я получаю:

Ошибка HTTP при получении URL. Status = 400

Я попытался установить лучший заголовок для запроса, используя те же параметры, которые я отправляю при подключении, делая запрос POST.

Connection.Response loginForm = Jsoup.connect(url)
           .method(Connection.Method.GET).execute();
System.out.println("GET");

Document document = Jsoup.connect(url)
           .data("email", usr)
           .data("password", psw)
           .header("Host", "dashboard.ngrok.com")
           .header("Origin", "https://dashboard.ngrok.com")
           .referrer(url)
           .cookies(loginForm.cookies())
           .post();

Я также пробовал этот тип запроса:

Response res = Jsoup.connect(url)
            .data("email", usr, "password", psw)
            .method(Method.POST)
            .execute();
Map<String, String> loginCookies = res.cookies();

Document doc = Jsoup.connect(ngrok)
    .cookies(loginCookies)
    .get();

Выходные данные говорят:

Исключение в потоке "main" org.jsoup.HttpStatusException: ошибка HTTP при получении URL. Статус = 400, URL = https://dashboard.ngrok.com/user/login

1 Ответ

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

Как TDG посоветовал мне, я добавил csrf_token. Код результата такой:

CookieHandler.setDefault(new CookieManager());

    Connection.Response loginForm = Jsoup.connect(url)
            .method(Connection.Method.GET)
            .userAgent(USER_AGENT).execute();

    Document tok = loginForm.parse();
    Element e = tok.select("input[name=csrf_token]").first();
    String appToken = e.attr("value");
    System.out.println(appToken);
    Connection.Response login = Jsoup.connect(url)
                .data("email", usr)
                .data("password", psw)
                .data("csrf_token", appToken)
                .userAgent(USER_AGENT)
                .header("Host", "dashboard.ngrok.com")
                .header("Origin", "https://dashboard.ngrok.com")
                .referrer(url)
                .cookies(loginForm.cookies())
                .method(Method.POST)
                .execute();

Спасибо за помощь.

...