HttpWebRequest через SSL с учетными данными клиента - PullRequest
5 голосов
/ 04 июня 2009

Я пытаюсь использовать HttpWebRequest для получения https URI, который требует имя пользователя и пароль. Если я помещаю URI в браузер, появляется диалоговое окно с запросом учетных данных, а затем работает. Использование HttpWebRequest дает мне 401 несанкционированную ошибку.

В документации для NetworkCredentials говорится, что она не поддерживает SSL, но я не могу найти то, что должен использовать.

1 Ответ

5 голосов
/ 04 июня 2009

Использует ли сервер базовую аутентификацию HTTP или какой-либо другой тип? Если он использует HTTP basic, вы можете установить для свойства Credentials веб-запроса учетные данные, содержащие правильное имя пользователя и пароль, и установить для свойства PreAuthenticate значение true.

Вот пример (он не тестировался, поэтому используйте его только в качестве руководства):

var uri = new Uri("https://somesite.com/something");
var request = WebRequest.Create(uri) as HttpWebRequest;
request.Credentials = new NetworkCredential("myUserName","myPassword");
request.PreAuthenticate = true;

var response = request.GetResponse();

Примечание. По моему опыту, в .NET Framework наблюдается странное поведение. Вы могли бы подумать, что он должен делать то, что говорит код, но на самом деле он делает это:

  • Отправить запрос на сервер без учетных данных
  • Сервер отвечает 401
  • Повторно отправить запрос с предоставленными вами учетными данными
  • Сервер принимает запрос.

Я понятия не имею, почему он это сделал, так как кажется, что он сломан, так что, возможно, это была изюминка моей машины и, возможно, с тобой этого не случится.

Если ваше приложение не чувствительно к производительности и ваши запросы не являются сообщениями больших данных, вы, вероятно, не заметите, но чтобы обойти это, мне пришлось вручную создать заголовок базовой аутентификации HTTP и установить его на HttpWebRequest вручную, манипулируя коллекцией Headers.

...