Example #1
0
        internal BitFlyerResponse <T> Get <T>(string apiName, string queryParameters = "")
        {
            var path = _publicBasePath + apiName.ToLower();

            if (!string.IsNullOrEmpty(queryParameters))
            {
                path += "?" + queryParameters;
            }

            using (var request = new HttpRequestMessage(HttpMethod.Get, path))
            {
                var response = new BitFlyerResponse <T>();
                try
                {
                    response.ParseResponseMessage(path, _client.SendAsync(request).Result);
                    return(response);
                }
                catch (AggregateException aex)
                {
                    var ex = aex.InnerException;
                    response.Exception = ex;
                    if (ex is TaskCanceledException) // Caused timedout
                    {
                        response.StatusCode = HttpStatusCode.RequestTimeout;
                    }
                    else if (ex is HttpRequestException)
                    {
                        if (ex.InnerException is WebException)
                        {
                            response.ErrorMessage = ((WebException)ex.InnerException).Status.ToString();
                            response.StatusCode   = HttpStatusCode.InternalServerError;
                        }
                    }
                    else if (ex is WebException)
                    {
                        var we   = ex.InnerException as WebException;
                        var resp = we.Response as HttpWebResponse;
                        if (resp != null)
                        {
                            response.StatusCode = resp.StatusCode;
                        }
                        else
                        {
                            response.StatusCode = HttpStatusCode.NoContent;
                        }
                    }
                    else
                    {
                        throw ex;
                    }
                    return(response);
                }
            }
        }
Example #2
0
        internal BitFlyerResponse <T> PrivatePost <T>(string apiName, string body)
        {
            if (!IsPrivateApiEnabled)
            {
                throw new NotSupportedException("Access key and secret required.");
            }

            var timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.ff");
            var path      = _privateBasePath + apiName.ToLower();

            var text = timestamp + "POST" + path + body;
            var sign = BitConverter.ToString(_hmac.ComputeHash(Encoding.UTF8.GetBytes(text))).Replace("-", string.Empty).ToLower();

            using (var request = new HttpRequestMessage(HttpMethod.Post, path))
                using (var content = new StringContent(body))
                {
                    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                    request.Content             = content;
                    request.Headers.Clear();
                    request.Headers.Add("ACCESS-KEY", _apiKey);
                    request.Headers.Add("ACCESS-TIMESTAMP", timestamp);
                    request.Headers.Add("ACCESS-SIGN", sign);

                    var response = new BitFlyerResponse <T>();
                    try
                    {
                        response.ParseResponseMessage(text, _client.SendAsync(request).Result);
                        return(response);
                    }
                    catch (AggregateException aex)
                    {
                        var ex = aex.InnerException;
                        response.Exception = ex;
                        if (ex is TaskCanceledException) // Caused timedout
                        {
                            response.StatusCode = HttpStatusCode.RequestTimeout;
                        }
                        else if (ex is HttpRequestException)
                        {
                            if (ex.InnerException is WebException)
                            {
                                response.ErrorMessage = ((WebException)ex.InnerException).Status.ToString();
                                response.StatusCode   = HttpStatusCode.InternalServerError;
                            }
                        }
                        else if (ex is WebException)
                        {
                            var we   = ex.InnerException as WebException;
                            var resp = we.Response as HttpWebResponse;
                            if (resp != null)
                            {
                                response.StatusCode = resp.StatusCode;
                            }
                            else
                            {
                                response.StatusCode = HttpStatusCode.NoContent;
                            }
                        }
                        else
                        {
                            throw ex;
                        }
                        return(response);
                    }
                }
        }