Редактировать: Использование:
byte[] authBytes = System.Text.Encoding.UTF8.GetBytes(user + ":" + password);
wr.Headers["Authorization"] = "Basic " + Convert.ToBase64String(authBytes);
Кажется, работает нормально.
У меня есть приложение, которое связывается с CMS. В настоящее время я пытаюсь, чтобы этот клиент мог загружать текстовые / XML-данные в CMS с помощью метода «POST».
Я могу передать это с помощью curl:
curl -u user:password -H "Content-Type:text/xml" -d "<element>myXML</element>" serverURL
Однако, пытаясь использовать HttpWebRequest в C #, я не могу заставить сервер вернуть то, что я хочу. Итак, я запустил Wireshark и посмотрел на то, что на самом деле проходило, и это почти идентично, за исключением того факта, что при использовании curl я вижу:
Authorization: Basic <a bunch of hex>=\r\n
Credentials: user:password
В полях заголовка HTTP, когда в выводе моего клиента эти поля заголовка просто отсутствуют. («Credentials:» на самом деле не существует в виде обычного текста, это поддерево «Authorization:» - поэтому я не уверен, откуда оно берется, но имя пользователя и пароль верны.)
Код C #, который я пытаюсь использовать для установки учетных данных для веб-запроса, выглядит примерно так:
NetworkCredential myCred = new NetworkCredential(
user, password, serverURL);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri(serverURL), "Basic", myCred);
HttpWebRequest wr = (HttpWebRequest) HttpWebRequest.Create(serverURL);
wr.Credentials = myCache;
Я тоже пытался просто установить учетные данные (без указания serverURL):
wr.Credentials = new NetworkCredential(user,password,serverURL);
Но это все еще не делает его обнаруженным в wireshark. Кто-нибудь есть идеи, если:
A) Эта информация об авторизации должна быть в заголовке HTTP, чтобы это работало, и
B) Если это так, то как мне заставить C # вставить это? Кажется, я могу только найти достойные примеры, используя учетные данные по умолчанию, что не относится к тому, что я делаю.
Заранее спасибо.