Added Http Decompression support
This commit is contained in:
@@ -1,11 +1,11 @@
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
|
||||||
using System.IO.Compression;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Net;
|
||||||
|
|
||||||
namespace Discord.Helpers
|
namespace Discord.Helpers
|
||||||
{
|
{
|
||||||
@@ -21,9 +21,14 @@ namespace Discord.Helpers
|
|||||||
|
|
||||||
static Http()
|
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", "*/*");
|
||||||
_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);
|
string version = typeof(Http).GetTypeInfo().Assembly.GetName().Version.ToString(2);
|
||||||
_client.DefaultRequestHeaders.Add("user-agent", $"Discord.Net/{version} (https://github.com/RogueException/Discord.Net)");
|
_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)
|
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);
|
HttpRequestMessage msg = new HttpRequestMessage(method, path);
|
||||||
|
|
||||||
//Add Payload
|
|
||||||
if (data != null)
|
if (data != null)
|
||||||
msg.Content = new StringContent(data, Encoding.UTF8, "application/json");
|
msg.Content = new StringContent(data, Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
if (!hasResponse)
|
string result;
|
||||||
|
HttpResponseMessage response;
|
||||||
|
if (hasResponse)
|
||||||
{
|
{
|
||||||
await _client.SendAsync(msg, HttpCompletionOption.ResponseHeadersRead);
|
response = await _client.SendAsync(msg, HttpCompletionOption.ResponseContentRead);
|
||||||
return null;
|
if (!response.IsSuccessStatusCode)
|
||||||
|
throw new InvalidOperationException($"The server responded with error {(int)response.StatusCode}.");
|
||||||
|
result = await response.Content.ReadAsStringAsync();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var response = await _client.SendAsync(msg, HttpCompletionOption.ResponseContentRead);
|
response = await _client.SendAsync(msg, HttpCompletionOption.ResponseHeadersRead);
|
||||||
return await response.Content.ReadAsStringAsync();
|
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
|
#if DEBUG
|
||||||
|
|||||||
Reference in New Issue
Block a user