Подключение к защищенному паролем веб-каталогу

В моей программе я пытаюсь получить доступ к веб-сайту, защищенному паролем (при открытии в браузере появляется всплывающее окно, подобное этому на изображении, требующее от пользователя входа в систему (примечание: это просто изображение, найденное в Google, не тот сайт, которым я пользуюсь)). Всплывающее окно входа в систему

Теперь мне не нужно точно открывать этот сайт (на самом деле это подкаталог) или загружать его или что-то еще, я просто хочу проверить информацию для входа. Скажем, в приложении будет два текстовых поля, похожих на те, что всплывают в браузере, и я хочу проверить правильность введенного имени пользователя и пароля. Есть идеи как? Моя идея состояла в том, чтобы попытаться вести себя так, как будто это FTP-файл, поскольку это единственный способ выяснить, как установить имя пользователя и пароль в коде, и я ожидал, что если учетные данные будут неверными, программа удалить исключение или что-то в этом роде, но он просто проходит этот код безрезультатно.

Спасибо за любую помощь


person Marek Buchtela    schedule 17.03.2014    source источник


Ответы (1)


Вы можете попытаться сделать http-запрос к URL-адресу и предоставить учетные данные с запросом. Если ответ имеет код состояния 200 (OK), все в порядке. Если ответ имеет код состояния 401 (Unauthorized), то учетные данные не в порядке:

// create request
var request = (HttpWebRequest)WebRequest.Create("http://www.google.com");
request.Credentials = new NetworkCredential("Username", "Password");

try
{
    // get response
    var response = (HttpWebResponse)request.GetResponse();
    var statusCode = response.StatusCode;

    // verify response
    if (statusCode == HttpStatusCode.OK)
    {
        // login was ok
    }
}
catch (WebException ex)
{
    if (((HttpWebResponse) ex.Response).StatusCode == HttpStatusCode.Unauthorized)
    {
        // unauthorized
    }
}
person Kevin Brechbühl    schedule 17.03.2014
comment
Пробовал это в режиме онлайн с request.GetResponse(); выдается исключение - WebException не было обработано, удаленный сервер вернул ошибку: (401) Неавторизованный. - person Marek Buchtela; 17.03.2014
comment
@MarekBuchtela Это означает, что ваш вход в систему не выполнен. Я немного изменил код, потому что он выдал исключение. Пожалуйста, смотрите мой обновленный ответ. - person Kevin Brechbühl; 17.03.2014
comment
Нет, я имел в виду, что исключение выдается, даже если я ввожу правильный пароль - person Marek Buchtela; 19.03.2014
comment
@MarekBuchtela Я протестировал этот код выше, и у меня он сработал нормально. Если вы просматриваете веб-сайт в браузере и вводите правильные учетные данные, какой код состояния вы получаете? - person Kevin Brechbühl; 19.03.2014