В настоящее время я пытаюсь загрузить html-источник веб-страницы, используя объект URL и входной поток, как показано ниже.
url = new URL(urlString));
is = url.openStream();
br = new BufferedReader(new InputStreamReader(is));
while((tempLine = br.readLine()) != null){
pageSource.append(tempLine);
}
Веб-страница требует имя пользователя и пароль, когда вы просматриваете ее, и появляется во всплывающем меню при обычном просмотре. Я попытался передать имя пользователя и пароль в URL-адрес в следующем формате, который не работал.
http://имя пользователя:пароль@домен
В настоящее время я получаю эту ошибку при использовании кода выше
java.io.IOException: Server returned HTTP response code: 401 for URL:
Я был бы очень признателен за любую информацию о том, как пройти аутентификацию в домене, используя мои учетные данные, чтобы я мог загрузить исходный код страницы.
Большое спасибо - Джеймс
Аутентификация — это простое имя пользователя и пароль, которые появляются во всплывающем диалоговом окне при использовании обычного браузера, ранее с помощью автоматизации Selenium передача учетных данных через URL-адрес в упомянутом выше стиле работала отлично, однако использование того же URL-адреса для загрузчика исходного кода страницы сталкивается с этой ошибкой 401
Вы уверены, что не должны публиковать свои учетные данные? Тот же запрос работает в вашем браузере? Если нет, то это не правильный путь.
Вы пробовали отправлять заголовки Basic Authentication? В основном отправьте заголовок Authorization: Basic , за которым следует строка username:password, закодированная в base64. Подробнее здесь: developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization




Благодаря Эль Санчес за указатель на заголовки аутентификации, я зашел в почтальон, чтобы проверить домен, на который я нажимал, и обнаружил, что он использует аутентификацию NTLM вместо обычной аутентификации.
Я наткнулся на этот сайт здесь, который дал несколько реальных примеров использования аутентификации NTLM в Java и использовал следующий код, который отлично работает.
static final String kuser = "username"; // your account name
static final String kpass = password; // retrieve password for your account
static class MyAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
// I haven't checked getRequestingScheme() here, since for NTLM
// and Negotiate, the usrname and password are all the same.
System.err.println("Feeding username and password for " + getRequestingScheme());
return (new PasswordAuthentication(kuser, kpass.toCharArray()));
}
}
public static void main(String[] args) throws Exception {
Authenticator.setDefault(new MyAuthenticator());
URL url = new URL(args[0]);
InputStream ins = url.openConnection().getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
String str;
while((str = reader.readLine()) != null)
System.out.println(str);
}
Спасибо всем, кто прокомментировал за помощь :)
-Джеймс
Нам нужно больше информации. Как осуществляется аутентификация на этой странице? Почему вы ожидаете, что это сработает в GET?