Соединение Jsoup с базовой аутентификацией доступа

#java #jsoup #basic-authentication

#java #jsoup #базовая аутентификация

Вопрос:

Есть ли в Jsoup способ загрузить документ с веб-сайта с базовой аутентификацией доступа?

Ответ №1:

При проверке подлинности базового доступа HTTP вам необходимо отправить Authorization заголовок вместе со значением "Basic " base64encode("username:password") .

Например.

 String username = "foo";
String password = "bar";
String login = username   ":"   password;
String base64login = Base64.getEncoder().encodeToString(login.getBytes());

Document document = Jsoup
    .connect("http://example.com")
    .header("Authorization", "Basic "   base64login)
    .get();

// ...
  

(явное указание кодировки символов в getBytes() опущено для краткости, поскольку имя пользователя и пароль часто US-ASCII в любом случае просты; кроме того, Base64 всегда генерирует US-ASCII байты)

Ответ №2:

 //Log in
Response res = Jsoup
    .connect("url")
    .data("loginField", "login")
    .data("passwordField", "password")
    .method(Method.POST)
    .execute();

Document doc = res.parse();


//Keep logged in
Map<String, String> cookies = res.cookies();

Document doc2 = Jsoup
    .connect("url")
    .cookies(cookies)
    .get();
  

Комментарии:

1. OP спросил о базовой аутентификации http. Это решение предназначено для аутентификации на основе форм, что является чем-то совершенно другим.

2. В целом это полезный ответ. Может быть, редактирование вопроса, чтобы задать вопрос об аутентификации в целом, привело бы к лучшему сообщению?

3. @YuriSchimke 1) Редактирование вопроса после того, как на него был дан ответ, превращает существующие ответы в бессмыслицу, потому что они относятся к другому вопросу. 2) Вопрос, соответствующий этому ответу, задавался уже много раз и имеет лучшие ответы, чем этот. 3) Я нашел этот вопрос, потому что искал конкретные термины, которые соответствовали моему вопросу. Если бы этот вопрос был изменен, он больше не соответствовал бы моему вопросу, и я бы не нашел этот вопрос или правильный ответ BalusC. Изменение вопроса с правильным ответом никогда не является хорошей идеей.