Лучшая эквивалентность curl -u в C # - PullRequest
0 голосов
/ 07 июня 2018

Когда у нас есть эта команда curl:

curl -XPUT "https//auth.something.com"
-u "clientId:clientSecret"

Что мне нужно сделать, чтобы преобразовать ее в C #?

NetworkCredential myCred = new NetworkCredential(clientKey, clientSecret);

или это: https://stackoverflow.com/a/34649812/5531761

или webClient.Headers[HttpRequestHeader.Authorization] = "Basic " + based64; ( Зачем вам base64 кодировать заголовок авторизации? )

Или CredentialCache (https://stackoverflow.com/a/3996838/5531761)


Мой локонконвертация

using(var webClient = new WebClient()){
    webClient.UploadString("https//auth.something.com","PUT","{ \"data\":\"dummy data\" }");
}

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Если вы не можете или не будете использовать HttpClient, вы можете использовать HttpWebRequest:

string postData= "firstone=" + inputData;
ASCIIEncoding encoding = new ASCIIEncoding ();
byte[] data = encoding.GetBytes (postData);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create ("http://target.com");
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential ("username", "password");;
request.Method = "PUT";
request.ContentType =  "application/x-www-form-urlencoded";
request.ContentLength = data.Length;    
using (Stream stream = request.GetRequestStream ()) {
    stream.Write (data, 0, data.Length);
}    
var response = (HttpWebResponse)request.GetResponse ();
response.Close ();

MSDN документация .

Альтернативные варианты аутентификации::

  • request.Headers["Authorization"] = "Basic " + Convert.ToBase64String*Encoding.ASCII.GetBytes(authInfo));
    Базовая аутентификация HTTP требует, чтобы все после "Basic" кодировалось в Base64

  • httpWebRequest.Headers.Add("Authorization: OAuth "+acces_token);

0 голосов
/ 07 июня 2018

Это то, что вы ищете?

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("base address");
client.DefaultRequestHeaders.Add("Authorization", "Basic " + System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes("clientId" + ":" + "clientSecret")));

Обновление: на основе обновленного вопроса

Я еще не пробовал, но не могли бы вы проверить это?

using(var webClient = new WebClient())
{
    webClient.Headers.Add("Authorization", "Basic " + System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes("clientId" + ":" + "clientSecret")));
    webClient.UploadString("https//auth.something.com","PUT","{ \"data\":\"dummy data\" }");    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...