Added Http Decompression support
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Net.Http;
|
||||
using System.Reflection;
|
||||
using System.Diagnostics;
|
||||
using System.Net;
|
||||
|
||||
namespace Discord.Helpers
|
||||
{
|
||||
@@ -21,9 +21,14 @@ namespace Discord.Helpers
|
||||
|
||||
static Http()
|
||||
{
|
||||
_client = new HttpClient();
|
||||
_client = new HttpClient(new HttpClientHandler
|
||||
{
|
||||
AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip,
|
||||
UseCookies = false,
|
||||
PreAuthenticate = false //We do auth ourselves
|
||||
});
|
||||
_client.DefaultRequestHeaders.Add("accept", "*/*");
|
||||
_client.DefaultRequestHeaders.Add("accept-language", "en-US;q=0.8");
|
||||
_client.DefaultRequestHeaders.Add("accept-encoding", "gzip, deflate");
|
||||
|
||||
string version = typeof(Http).GetTypeInfo().Assembly.GetName().Version.ToString(2);
|
||||
_client.DefaultRequestHeaders.Add("user-agent", $"Discord.Net/{version} (https://github.com/RogueException/Discord.Net)");
|
||||
@@ -115,23 +120,36 @@ namespace Discord.Helpers
|
||||
|
||||
private static async Task<string> SendRequest(HttpMethod method, string path, string data, bool hasResponse)
|
||||
{
|
||||
//Create Request
|
||||
#if DEBUG
|
||||
Stopwatch stopwatch = Stopwatch.StartNew();
|
||||
#endif
|
||||
HttpRequestMessage msg = new HttpRequestMessage(method, path);
|
||||
|
||||
//Add Payload
|
||||
|
||||
if (data != null)
|
||||
msg.Content = new StringContent(data, Encoding.UTF8, "application/json");
|
||||
|
||||
if (!hasResponse)
|
||||
string result;
|
||||
HttpResponseMessage response;
|
||||
if (hasResponse)
|
||||
{
|
||||
await _client.SendAsync(msg, HttpCompletionOption.ResponseHeadersRead);
|
||||
return null;
|
||||
response = await _client.SendAsync(msg, HttpCompletionOption.ResponseContentRead);
|
||||
if (!response.IsSuccessStatusCode)
|
||||
throw new InvalidOperationException($"The server responded with error {(int)response.StatusCode}.");
|
||||
result = await response.Content.ReadAsStringAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
var response = await _client.SendAsync(msg, HttpCompletionOption.ResponseContentRead);
|
||||
return await response.Content.ReadAsStringAsync();
|
||||
}
|
||||
response = await _client.SendAsync(msg, HttpCompletionOption.ResponseHeadersRead);
|
||||
if (!response.IsSuccessStatusCode)
|
||||
throw new InvalidOperationException($"The server responded with error {(int)response.StatusCode}.");
|
||||
result = null;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
stopwatch.Stop();
|
||||
Debug.WriteLine($"{method} {path}: {Math.Round(stopwatch.ElapsedTicks / (double)TimeSpan.TicksPerMillisecond, 2)}ms");
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
|
||||
Reference in New Issue
Block a user