Как загрузить исходный HTML-код на Java, когда страница требует входа?

В настоящее время я пытаюсь загрузить 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:

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

Большое спасибо - Джеймс

Нам нужно больше информации. Как осуществляется аутентификация на этой странице? Почему вы ожидаете, что это сработает в GET?

Alexis 20.05.2019 14:55

Аутентификация — это простое имя пользователя и пароль, которые появляются во всплывающем диалоговом окне при использовании обычного браузера, ранее с помощью автоматизации Selenium передача учетных данных через URL-адрес в упомянутом выше стиле работала отлично, однако использование того же URL-адреса для загрузчика исходного кода страницы сталкивается с этой ошибкой 401

James m 20.05.2019 14:59

Вы уверены, что не должны публиковать свои учетные данные? Тот же запрос работает в вашем браузере? Если нет, то это не правильный путь.

Alexis 20.05.2019 15:02

Вы пробовали отправлять заголовки Basic Authentication? В основном отправьте заголовок Authorization: Basic , за которым следует строка username:password, закодированная в base64. Подробнее здесь: developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorizat‌​ion

Ale Sanchez 20.05.2019 15:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Благодаря Эль Санчес за указатель на заголовки аутентификации, я зашел в почтальон, чтобы проверить домен, на который я нажимал, и обнаружил, что он использует аутентификацию 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);
}

Спасибо всем, кто прокомментировал за помощь :)

-Джеймс

Другие вопросы по теме