Является ли сервер использованием базовой аутентификации 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. Можно подумать, что он должен делать то, что говорит код, но он на самом деле делает это:
- Отправить запрос на сервер без каких-либо полномочий
- Сервер отвечает 401
- Re-Послать запрос с учетными данными, которые Вы дали it
- Сервер принимает запрос.
Я понятия не имею, почему это было бы так, как будто оно было сломанным, поэтому, возможно, это была причуда моей машины, и, возможно, это не случится с вами.
Если ваше приложение не чувствительно к производительности, а ваши запросы не являются POSTS больших данных, вы, вероятно, не заметите, но чтобы обойти его, мне пришлось вручную создать заголовок базовой аутентификации HTTP и установить его на HttpWebRequest
вручную, манипулируя коллекцией Headers
.
Я считаю, что поведение, которое вы описываете, такое же поведение, что и wget в * nix. Он пытается один раз и терпит неудачу, а затем отправляет учетные данные и преуспевает. – Stephan
Я думаю, что это какая-то последовательность запросов-запросов, которая является частью спецификации http. – MGOwen