Создайте запрос HttpWebRequest для http://user:password@doamin/query URL - PullRequest
7 голосов
/ 27 декабря 2011

Мне нужно отправить HttpWebRequest на URL с базовыми учетными данными, указанными ниже:

http://user:password@doamin/query

Я пытался установить URL-адрес как есть, но, похоже, он не прошел учетные данные (получил 403).
Попытка установить свойство Credentials для HttpWebRequest:

request.Credentials = new NetworkCredentials("username","pasword")

И удаление их из URL (в результате http://domain/query), но все равно получил тот же результат (403).

Использование URL-адреса напрямую из любого браузера успешно завершено, поэтому учетные данные в порядке.

Чего мне не хватает?

[ОБНОВЛЕНИЕ - ОТВЕТ]
Вот код, который работал для меня:

string credentials = "username:password";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(formattedUrl);
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(credentials)));
request.PreAuthenticate = true;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Сначала вы создаете свой класс кредитов:

NetworkCredential myCred = new NetworkCredential("username", "password");

Добавьте ваш кэш Creds:

CredentialCache credsCache = new CredentialCache();

credsCache.Add(new Uri("www.foo.com"), "Basic", myCred);

WebRequest wr = WebRequest.Create("www.foo.com");
wr.Credentials = credsCache;

Затем установите wr.Credentials для credsCache

0 голосов
/ 27 декабря 2011

Пароль в виде простого текста больше не является действительной частью URL (согласно соответствующему RFC).Вы должны использовать NetworkCredentials, как вы уже пробовали.См. MSDN для фрагмента кода / образца :

NetworkCredential myCred = new NetworkCredential(
    SecurelyStoredUserName,SecurelyStoredPassword,SecurelyStoredDomain);

CredentialCache myCache = new CredentialCache();

myCache.Add(new Uri("http://www.contoso.com"), "Basic", myCred);
myCache.Add(new Uri("http://app.contoso.com"), "Basic", myCred);

WebRequest wr = WebRequest.Create("http://www.contoso.com");
wr.Credentials = myCache;

UPD.По сравнению с фрагментом кода MSDN необходимо добавить строки с префиксом "http://"", чтобы избежать исключения "Invalid URI".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...