protected async Task <ExchangeResponse> GetResponse(ExchangeRequestBase request) { var relativeUrl = request.RequestUrl; var absoluteUri = new Uri(new Uri(API_ENDPOINT_URL), relativeUrl); var timestamp = (request.TimeStamp).ToString(System.Globalization.CultureInfo.InvariantCulture); var body = request.RequestBody; var method = request.Method; var url = absoluteUri.ToString(); var passphrase = _authContainer.Passphrase; var apiKey = _authContainer.ApiKey; // Caution: Use the relative URL, *NOT* the absolute one. var signature = _authContainer.ComputeSignature(timestamp, relativeUrl, method, body); using (var httpClient = new HttpClient()) { HttpResponseMessage response; httpClient.DefaultRequestHeaders.Add("CB-ACCESS-KEY", apiKey); httpClient.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", signature); httpClient.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", timestamp); httpClient.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", passphrase); httpClient.DefaultRequestHeaders.Add("User-Agent", "sefbkn.github.io"); switch (method) { case "GET": response = await httpClient.GetAsync(absoluteUri); break; case "POST": var requestBody = new StringContent(body); response = await httpClient.PostAsync(absoluteUri, requestBody); break; default: throw new NotImplementedException("The supplied HTTP method is not supported: " + method ?? "(null)"); } var contentBody = await response.Content.ReadAsStringAsync(); var headers = response.Headers.AsEnumerable(); var statusCode = response.StatusCode; var isSuccess = response.IsSuccessStatusCode; var genericExchangeResponse = new ExchangeResponse(statusCode, isSuccess, headers, contentBody); return(genericExchangeResponse); } }
private async Task <HttpResponseMessage> CoreGetRequest(ExchangeRequestBase request) { using (var httpClient = new HttpClient()) { var relativeUrl = request.RequestUrl; var absoluteUri = new Uri(new Uri(API_ENDPOINT_URL), relativeUrl); var timeStamp = DateTime.UtcNow.ToUnixTimestamp().ToString(System.Globalization.CultureInfo.InvariantCulture); //(request.TimeStamp).ToString(System.Globalization.CultureInfo.InvariantCulture); var body = request.RequestBody; var method = request.Method; var url = absoluteUri.ToString(); String passphrase = ""; String apiKey = ""; var signature = ""; httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0"); if (UsePublicExchange == false) { passphrase = _authContainer.Passphrase; apiKey = _authContainer.ApiKey; signature = _authContainer.ComputeSignature(timeStamp, relativeUrl, method, body); httpClient.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", signature); httpClient.DefaultRequestHeaders.Add("CB-ACCESS-KEY", apiKey); httpClient.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", timeStamp); httpClient.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", passphrase); } HttpResponseMessage response = null; response = await httpClient.GetAsync(absoluteUri); return(response); } }
protected async Task <ExchangeResponse> GetResponse(ExchangeRequestBase request) { var relativeUrlForURL = request.RequestUrl; var baseURI = IsSandbox ? API_SANDBOX_ENDPOINT_URL : API_ENDPOINT_URL; var absoluteUri = new Uri(baseURI, relativeUrlForURL); var uriBuilder = new UriBuilder(absoluteUri); uriBuilder.Port = -1; // add query parameters var requestCasted = request as ExchangePageableRequestBase; var nvc = HttpUtility.ParseQueryString(string.Empty); if (request is ExchangePageableRequestBase) { if (requestCasted.afterCursor != null) { nvc["after"] = requestCasted.afterCursor; } if (requestCasted.RecordCount != null) { nvc["limit"] = requestCasted.RecordCount.Value.ToString(); } //if (requestCasted.ZeroBasedCursor < 0) //{ // nvc["before"] = (Math.Abs(requestCasted.ZeroBasedCursor-1)).ToString(); // change to 1 based // if (requestCasted.RecordCount != null) // nvc["limit"] = requestCasted.RecordCount.Value.ToString(); //} //else if (requestCasted.ZeroBasedCursor > 0) //{ // nvc["after"] = (requestCasted.ZeroBasedCursor+1).ToString(); // change to 1 based // if (requestCasted.RecordCount != null) // nvc["limit"] = requestCasted.RecordCount.Value.ToString(); //} // else it's zero so no need to put any query parameter } if (request is GetPersonalOrdersRequest) { var requestCasted2 = request as GetPersonalOrdersRequest; if (requestCasted2.Status != null) { foreach (var status in requestCasted2.Status) { nvc.Add("status", status); } } } if (request is CancelAllPersonalOrdersRequest) { var requestCasted3 = request as CancelAllPersonalOrdersRequest; if (requestCasted3.product_id != null) { nvc["product_id"] = requestCasted3.product_id; } } if (nvc.Keys.Count > 0) { uriBuilder.Query = nvc.ToString(); } var body = request.RequestBody; var method = request.Method; var url = uriBuilder.ToString(); var relativeUrlForSignature = baseURI.MakeRelativeUri(uriBuilder.Uri).ToString(); await rateGatePolling.WaitToProceedAsync(); // rate limit prior to TimeStamp being generated using (var httpClient = new HttpClient()) { if (_authContainer != null) { // authenticated get, required for querying account specific data, but optional for public data // Caution: Use the relative URL, *NOT* the absolute one. var signature = _authContainer.ComputeSignature("/" + relativeUrlForSignature, method, body); httpClient.DefaultRequestHeaders.Add("CB-ACCESS-KEY", signature.ApiKey); httpClient.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", signature.Signature); httpClient.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", signature.TimeStamp); httpClient.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", signature.Passphrase); } httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(ContentType)); httpClient.DefaultRequestHeaders.Add("User-Agent", "vslee fork of sefbkn.github.io"); HttpResponseMessage response; switch (method) { case "GET": response = await httpClient.GetAsync(url); break; case "POST": var requestBody = new StringContent(body, Encoding.UTF8, "application/json"); response = await httpClient.PostAsync(url, requestBody); break; case "DELETE": response = await httpClient.DeleteAsync(url); break; case "PUT": throw new NotImplementedException("PUT"); default: throw new NotImplementedException("The supplied HTTP method is not supported: " + method ?? "(null)"); } var contentBody = await response.Content.ReadAsStringAsync(); var headers = response.Headers.AsEnumerable(); var statusCode = response.StatusCode; var isSuccess = response.IsSuccessStatusCode; var genericExchangeResponse = new ExchangeResponse(statusCode, isSuccess, headers, contentBody); return(genericExchangeResponse); } }