하아찡
C# 바이낸스 API 사용 - 3(C# Rest API 호출) 본문
안녕하세요.
C#에서 RestAPI를 사용하기위해서 저는 HttpClient를 사용했습니다.
바로 본론으로 들어가서 아래와 같은 코드를 사용했습니다.
public async Task<bool> ServerTime()
{
try
{
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri(URL.ServerTime),
Headers =
{
{ "accept", "application/json" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode(); //정상적이지 못할경우 예외처리해버림
var body = await response.Content.ReadAsStringAsync();
// 반환된 결과를 JSON으로 변환할 수 있으면 변환
var ServerTime = JObject.Parse(body);
long Time = Convert.ToInt64(ServerTime["serverTime"]);
return Time != 0;
}
}
catch (Exception e)
{
return false;
}
}
이전에 작성했던 글에서 바이낸스 서버시간을 받아오는 코드입니다.
다른 방법은 API키를 사용한 API호출입니다.
public async Task<string> Account()
{
try
{
Dictionary<string, string> Parameters = new Dictionary<string, string>();
Parameters.Add("timestamp", DateTime.UtcNow.ConvertToUnixTime().ToString());
Parameters.Add("recvWindow", "50000");
Parameters.Add("omitZeroBalances", "true");
string url = BinanceURL.GetBinanceFullUrl( MyKey.SecretKey, Parameters, URL.SpotAccount);
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri(url),
Headers =
{
{ "accept", "application/json" },
{ "X-MBX-APIKEY", MyKey.APIKey },
},
};
using (var response = await client.SendAsync(request))
{
//return test;
response.EnsureSuccessStatusCode(); //정상적이지 못할경우 예외처리해버림
var body = await response.Content.ReadAsStringAsync();
// 반환된 결과를 JSON으로 변환할 수 있으면 변환
var json = JObject.Parse(body);
return json.ToString(); // 필요하다면 특정 데이터 추출 가능
}
}
catch (Exception e)
{
return e.Message + " Error ";
}
}
Parameters에는 해당 API를 호출할때 사용하는 파라미터값을 추가하여 값을 전달해주기위해 사용했습니다.
헤더에 발급받은 API키를 사용해서 전달해주며, SecretKey는 GetBinanaceFullUrl 함수를 사용해서 전달해줍니다.
GetBinanceFullUrl 함수
public static string GetBinanceFullUrl(string secretKey, Dictionary<string, string> items, string url)
{
StringBuilder builder = new StringBuilder();
foreach (KeyValuePair<string, string> item in items)
{
builder.Append(item.Key).Append("=").Append(item.Value).Append("&");
}
string queryString = builder.ToString().TrimEnd('&');
var queryHash = ToHMACSHA256(secretKey, queryString);
return string.Format("{0}?{1}&signature={2}", url, queryString, queryHash);
}
Key
public class Key
{
public string APIKey { get; private set; }
public string SecretKey { get; private set; }
public Key(string api = "", string secret = "")
{
APIKey = api;
SecretKey = secret;
}
/// <summary>
/// API키값 변경
/// </summary>
/// <param name="key">API키값</param>
public void SetAPIKey(string key)
{
APIKey = key;
}
/// <summary>
/// 시크릿 키값 변경
/// </summary>
/// <param name="key">시크릿 키값</param>
public void SetSecretKey(string key)
{
SecretKey = key;
}
}
URL은 아래와 같이 작업해뒀습니다.
public class URLs
{
public string ServerTime { get; private set; }
public string SpotAccount { get; private set; }
public string SpotTrades { get; private set; }
public URLs()
{
string Spot = "https://api.binance.com";
SpotAccount = Spot + "/api/v3/account";
ServerTime = Spot + "/api/v3/time";
SpotTrades = Spot + "/api/v3/trades";
}
}
반응형
'C# > 바이낸스' 카테고리의 다른 글
C# 바이낸스 API 사용 - 2(Rest API) (0) | 2024.10.05 |
---|---|
C# 바이낸스 API 사용 - 1(바이낸스 API키 발급) (3) | 2024.10.04 |