/// <summary> /// Make a request to a path on the API /// </summary> /// <param name="url">Path and query</param> /// <param name="baseUrl">Override the base url, null for the default BaseUrl</param> /// <param name="payload">Payload, can be null. For private API end points, the payload must contain a 'nonce' key set to GenerateNonce value.</param> /// The encoding of payload is API dependant but is typically json.</param> /// <param name="method">Request method or null for default</param> /// <returns>Raw response</returns> public string MakeRequest(string url, string baseUrl = null, Dictionary <string, object> payload = null, string method = null) { this.api.RateLimit.WaitToProceed(); if (string.IsNullOrWhiteSpace(url)) { return(null); } else if (url[0] != '/') { url = "/" + url; } string fullUrl = (baseUrl ?? this.api.BaseUrl) + url; Uri uri = this.api.ProcessRequestUrl(new UriBuilder(fullUrl), payload); HttpWebRequest request = HttpWebRequest.CreateHttp(uri); request.Headers["Accept-Language"] = "en-us; q=1.0;"; request.Method = method ?? this.api.RequestMethod; request.ContentType = this.api.RequestContentType; request.UserAgent = BaseAPI.RequestUserAgent; request.CachePolicy = this.api.RequestCachePolicy; request.Timeout = request.ReadWriteTimeout = request.ContinueTimeout = (int)this.api.RequestTimeout.TotalMilliseconds; request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; api.ProcessRequest(request, payload); HttpWebResponse response; try { response = request.GetResponse() as HttpWebResponse; if (response == null) { throw new APIException("Unknown response from server"); } } catch (WebException we) { response = we.Response as HttpWebResponse; if (response == null) { throw new APIException(we.Message ?? "Unknown response from server"); } } string responseString = null; using (Stream responseStream = response.GetResponseStream()) { responseString = new StreamReader(responseStream).ReadToEnd(); if (response.StatusCode != HttpStatusCode.OK) { throw new APIException(responseString); } api.ProcessResponse(response); } response.Dispose(); return(responseString); }
/// <summary> /// ASYNC - Make a request to a path on the API /// </summary> /// <param name="url">Path and query</param> /// <param name="baseUrl">Override the base url, null for the default BaseUrl</param> /// <param name="payload">Payload, can be null. For private API end points, the payload must contain a 'nonce' key set to GenerateNonce value.</param> /// The encoding of payload is API dependant but is typically json.</param> /// <param name="method">Request method or null for default</param> /// <returns>Raw response</returns> public async Task <string> MakeRequestAsync(string url, string baseUrl = null, Dictionary <string, object> payload = null, string method = null) { await new SynchronizationContextRemover(); await api.RateLimit.WaitToProceedAsync(); if (string.IsNullOrWhiteSpace(url)) { return(null); } else if (url[0] != '/') { url = "/" + url; } string fullUrl = (baseUrl ?? api.BaseUrl) + url; Uri uri = api.ProcessRequestUrl(new UriBuilder(fullUrl), payload); HttpWebRequest request = HttpWebRequest.CreateHttp(uri); request.Headers["Accept-Language"] = "en-us; q=1.0;"; request.Method = method ?? api.RequestMethod; request.ContentType = api.RequestContentType; request.UserAgent = BaseAPI.RequestUserAgent; request.CachePolicy = api.RequestCachePolicy; request.Timeout = request.ReadWriteTimeout = (int)api.RequestTimeout.TotalMilliseconds; try { // not supported on some platforms request.ContinueTimeout = (int)api.RequestTimeout.TotalMilliseconds; } catch { } request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; api.ProcessRequest(request, payload); HttpWebResponse response; try { response = await request.GetResponseAsync() as HttpWebResponse; if (response == null) { throw new APIException("Unknown response from server"); } } catch (WebException we) { response = we.Response as HttpWebResponse; if (response == null) { throw new APIException(we.Message ?? "Unknown response from server"); } } string responseString = null; using (Stream responseStream = response.GetResponseStream()) { responseString = new StreamReader(responseStream).ReadToEnd(); if (response.StatusCode != HttpStatusCode.OK) { // 404 maybe return empty responseString if (string.IsNullOrWhiteSpace(responseString)) { throw new APIException(string.Format("{0} - {1}", response.StatusCode.ConvertInvariant <int>(), response.StatusCode)); } throw new APIException(responseString); } api.ProcessResponse(response); } response.Dispose(); return(responseString); }