@@ -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