Как загрузить исходный код HTML на Java, когда страница требует входа? - PullRequest
0 голосов
/ 20 мая 2019

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

В настоящее время я получаю эту ошибку при использовании кода выше

java.io.IOException: Server returned HTTP response code: 401 for URL:

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

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

1 Ответ

0 голосов
/ 21 мая 2019

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

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

-Джеймс

...