hopefuly better getstring/getstreamasync

This commit is contained in:
Master Kwoth 2016-05-03 16:11:14 +02:00
parent bd629dbbe8
commit a5a521ee04

View File

@ -25,13 +25,17 @@ namespace NadekoBot.Classes
{ {
private static DateTime lastRefreshed = DateTime.MinValue; private static DateTime lastRefreshed = DateTime.MinValue;
private static string token { get; set; } = ""; private static string token { get; set; } = "";
private static readonly HttpClient httpClient = new HttpClient();
public static async Task<Stream> GetResponseStreamAsync(string url, public static async Task<Stream> GetResponseStreamAsync(string url,
IEnumerable<KeyValuePair<string, string>> headers = null, RequestHttpMethod method = RequestHttpMethod.Get) IEnumerable<KeyValuePair<string, string>> headers = null, RequestHttpMethod method = RequestHttpMethod.Get)
{ {
if (string.IsNullOrWhiteSpace(url)) if (string.IsNullOrWhiteSpace(url))
throw new ArgumentNullException(nameof(url)); throw new ArgumentNullException(nameof(url));
var httpClient = new HttpClient(); //if its a post or there are no headers, use static httpclient
// if there are headers and it's get, it's not threadsafe
var cl = headers == null || method == RequestHttpMethod.Post ? httpClient : new HttpClient();
cl.DefaultRequestHeaders.Clear();
switch (method) switch (method)
{ {
case RequestHttpMethod.Get: case RequestHttpMethod.Get:
@ -39,17 +43,17 @@ namespace NadekoBot.Classes
{ {
foreach (var header in headers) foreach (var header in headers)
{ {
httpClient.DefaultRequestHeaders.TryAddWithoutValidation(header.Key, header.Value); cl.DefaultRequestHeaders.TryAddWithoutValidation(header.Key, header.Value);
} }
} }
return await httpClient.GetStreamAsync(url).ConfigureAwait(false); return await cl.GetStreamAsync(url).ConfigureAwait(false);
case RequestHttpMethod.Post: case RequestHttpMethod.Post:
FormUrlEncodedContent formContent = null; FormUrlEncodedContent formContent = null;
if (headers != null) if (headers != null)
{ {
formContent = new FormUrlEncodedContent(headers); formContent = new FormUrlEncodedContent(headers);
} }
var message = await httpClient.PostAsync(url, formContent).ConfigureAwait(false); var message = await cl.PostAsync(url, formContent).ConfigureAwait(false);
return await message.Content.ReadAsStreamAsync().ConfigureAwait(false); return await message.Content.ReadAsStreamAsync().ConfigureAwait(false);
default: default:
throw new NotImplementedException("That type of request is unsupported."); throw new NotImplementedException("That type of request is unsupported.");