Почему я получаю 401 Несанкционированный при создании HttpWebRequest с правильными учетными данными? - PullRequest
4 голосов
/ 22 июля 2010

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

Я пытаюсь добиться того же с помощью кода, используя объект HttpWebRequest:

var webRequest = (HttpWebRequest)WebRequest.Create(url);

webRequest.GetResponse() и т. Д. *

Раньше это работало до того, как владельцы веб-сайтов добавили некоторую защиту сайту и предоставили мне имя пользователя и пароль. У WebRequest есть свойство credentials, которое я настраивал следующим образом:

webRequest.Credentials = new NetworkCredential("username", "password")

Я также пробовал:

webRequest.Credentials = new NetworkCredential("username", "password", “url domain”)

это всегда приводит к ошибке:

«Удаленный сервер возвратил ошибку: (401) не авторизован».

Я что-то упускаю из виду?

Ответы [ 5 ]

1 голос
/ 17 августа 2010

Использование System.Net.NetworkCredential может быть неэффективным в зависимости от модели аутентификации ресурса. Было бы полезно понять модель, используемую удаленным сайтом.

OpenID, проверка подлинности с помощью форм и встроенная проверка подлинности Windows работают по-разному. Вы можете попытаться определить, какой метод аутентификации они используют, используя инструменты, описанные @Christoph и @Lex, или просто связаться с поставщиком удаленного веб-сайта.

Если удаленный сайт использует протокол согласования, такой как Kerberos или NTLM, то поведение, которое вы испытываете, действительно странное; однако некоторые другие протоколы могут потребовать от вас другого пути.

0 голосов
/ 02 ноября 2010

Используете ли вы фильтрацию запросов на веб-сервере? Можете ли вы проверить различные глаголы, которые должны быть запрещены?

0 голосов
/ 27 октября 2010

Если нет проблем с конфиденциальностью, вы можете разместить URL-адрес, к которому вы пытаетесь обратиться.

Если URL неверный или ссылается на недопустимую страницу (или недопустимую комбинацию страница + параметры), вы иногда будете видеть ошибки сервера, подобные этой.

Я работал с устаревшим веб-приложением из штата Мичиган, и каждый раз, когда я пытался получить доступ к странице с неправильными параметрами страницы, оно выдавало 400 ошибок стиля.

0 голосов
/ 22 июля 2010

Если вы используете HTTP, просто используйте Microsoft Network Monitor или Wireshark, чтобы захватить, какое сообщение 401 возвращается с веб-сервера. Это может быть 401.3 или другой код ошибки, который на самом деле имеет другое значение.

0 голосов
/ 22 июля 2010

попробуйте отладить ваш запрос с помощью fiddler (www.fiddler2.com).

Поэтому вы должны запустить Fiddler и добавить настройки прокси в ваш запрос:

webRequest.Proxy = New WebProxy("http://127.0.0.1:8888")
...