Browse Source

Added Http Decompression support

tags/docs-0.9
Brandon Smith 9 years ago
parent
commit
89ef25710a
1 changed files with 31 additions and 13 deletions
  1. +31
    -13
      src/Discord.Net/Helpers/Http.cs

+ 31
- 13
src/Discord.Net/Helpers/Http.cs View File

@@ -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);
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 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 #if DEBUG


Loading…
Cancel
Save