CURL запрос в C#

Не могу сделать запрос вот такого вида: curl -u {client_id}:{client_secret} -d grant_type=client_credentials https://us.battle.net/oauth/token

Подскажите пожалуйста, как сделать данный запрос на C#? Заранее спасибо!


Ответы (1 шт):

Автор решения: EvgeniyZ

Эх, попросил ведь я вас написать то, что у вас в итоге получилось. Ну ок, делаю я.

Код будет примерно следующим:

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes($"{client_id}:{client_secret}")));

    var data = new FormUrlEncodedContent(new[]
    {
        new KeyValuePair<string, string>("grant_type", "client_credentials")
    });

    var resp = await client.PostAsync("https://us.battle.net/oauth/token", data);
    resp.EnsureSuccessStatusCode();
    var result = await resp.Content.ReadAsStringAsync();
}

Где:

  • client.DefaultRequestHeaders.Authorization - авторизация, в CURL это -u. Тут на сколько я понял должна отправляться строка в кодировке ASCII, которая закодирована в Base64. Не проверял, поиграйтесь с ней и найдите то, что вам надо.

  • data = new FormUrlEncodedContent(new[] - это аналог -d, который должен составить application/x-www-form-urlencoded контент для отправки.

  • await client.PostAsync("https://us.battle.net/oauth/token", data); - отправляем данные POST запросом на указанный адрес.

  • resp.EnsureSuccessStatusCode(); - выводим Exception, если сервер дал нам что либо, кроме успешного заголовка.

  • await resp.Content.ReadAsStringAsync(); - берем из ответа данные в виде текста.


Повторюсь, я не проверял данный код. Если будут проблемы, то стоит поиграться с заголовком авторизации, остальное должно подходить под CURL.

→ Ссылка