private static async Task<string> LoadUsingRequestAsync(string uri) {
using (var order = KillerOrder.Create((HttpWebRequest)WebRequest.Create(uri), OptionWebRequestTimeout)) {
var request = order.Victim;
request.Method = "GET";
request.UserAgent = InternalUtils.GetKunosUserAgent();
request.Headers.Add("Accept-Encoding", "gzip");
if (OptionIgnoreSystemProxy) {
request.Proxy = null;
}
if (OptionForceDisabledCache) {
request.CachePolicy = _cachePolicy ??
(_cachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore));
}
request.Timeout = OptionWebRequestTimeout;
string result;
using (var response = (HttpWebResponse)await request.GetResponseAsync()) {
if (response.StatusCode != HttpStatusCode.OK) throw new Exception($"StatusCode = {response.StatusCode}");
using (var stream = response.GetResponseStream()) {
if (stream == null) throw new Exception(@"ResponseStream = null");
if (string.Equals(response.Headers.Get("Content-Encoding"), @"gzip", StringComparison.OrdinalIgnoreCase)) {
using (var deflateStream = new GZipStream(stream, CompressionMode.Decompress)) {
using (var reader = new StreamReader(deflateStream, Encoding.UTF8)) {
result = await reader.ReadToEndAsync();
}
}
} else {
using (var reader = new StreamReader(stream, Encoding.UTF8)) {
result = await reader.ReadToEndAsync();
}
}
}
}
if (OptionSaveResponses) {
var filename = FilesStorage.Instance.GetFilename("Logs",
$"Dump_{Regex.Replace(uri.Split('/').Last(), @"\W+", "_")}.json");
if (!File.Exists(filename)) {
File.WriteAllText(FilesStorage.Instance.GetFilename(filename), result);
}
}
return result;
}
}