#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. Изменение вопроса с правильным ответом никогда не является хорошей идеей.