diff options
Diffstat (limited to 'Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs')
| -rw-r--r-- | Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs b/Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs index ea4056547..4c034fa6a 100644 --- a/Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -13,7 +13,6 @@ using System.Globalization; using System.IO; using System.Linq; using System.Net; -using System.Net.Cache; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -70,11 +69,13 @@ namespace Emby.Common.Implementations.HttpClientManager _memoryStreamProvider = memoryStreamProvider; _appPaths = appPaths; +#if NET46 // http://stackoverflow.com/questions/566437/http-post-returns-the-error-417-expectation-failed-c ServicePointManager.Expect100Continue = false; // Trakt requests sometimes fail without this ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls; +#endif } /// <summary> @@ -131,6 +132,7 @@ namespace Emby.Common.Implementations.HttpClientManager private void AddIpv4Option(HttpWebRequest request, HttpRequestOptions options) { +#if NET46 request.ServicePoint.BindIPEndPointDelegate = (servicePount, remoteEndPoint, retryCount) => { if (remoteEndPoint.AddressFamily == AddressFamily.InterNetwork) @@ -139,6 +141,7 @@ namespace Emby.Common.Implementations.HttpClientManager } throw new InvalidOperationException("no IPv4 address"); }; +#endif } private WebRequest GetRequest(HttpRequestOptions options, string method) @@ -165,34 +168,52 @@ namespace Emby.Common.Implementations.HttpClientManager AddRequestHeaders(httpWebRequest, options); - httpWebRequest.AutomaticDecompression = options.EnableHttpCompression ? - (options.DecompressionMethod ?? DecompressionMethods.Deflate) : +#if NET46 + httpWebRequest.AutomaticDecompression = options.EnableHttpCompression ? + (options.DecompressionMethod ?? DecompressionMethods.Deflate) : DecompressionMethods.None; +#endif } - request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache); + + +#if NET46 + request.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.BypassCache); +#endif if (httpWebRequest != null) { if (options.EnableKeepAlive) { +#if NET46 httpWebRequest.KeepAlive = true; +#endif } } request.Method = method; +#if NET46 request.Timeout = options.TimeoutMs; - +#endif + if (httpWebRequest != null) { if (!string.IsNullOrEmpty(options.Host)) { +#if NET46 httpWebRequest.Host = options.Host; +#elif NETSTANDARD1_6 + httpWebRequest.Headers["Host"] = options.Host; +#endif } if (!string.IsNullOrEmpty(options.Referer)) { +#if NET46 httpWebRequest.Referer = options.Referer; +#elif NETSTANDARD1_6 + httpWebRequest.Headers["Referer"] = options.Referer; +#endif } } @@ -202,7 +223,10 @@ namespace Emby.Common.Implementations.HttpClientManager if (parts.Length == 2) { request.Credentials = GetCredential(url, parts[0], parts[1]); + // TODO: .net core ?? +#if NET46 request.PreAuthenticate = true; +#endif } } @@ -227,11 +251,19 @@ namespace Emby.Common.Implementations.HttpClientManager } else if (string.Equals(header.Key, "User-Agent", StringComparison.OrdinalIgnoreCase)) { +#if NET46 request.UserAgent = header.Value; +#elif NETSTANDARD1_6 + request.Headers["User-Agent"] = header.Value; +#endif } else { +#if NET46 request.Headers.Set(header.Key, header.Value); +#elif NETSTANDARD1_6 + request.Headers[header.Key] = header.Value; +#endif } } } @@ -407,8 +439,10 @@ namespace Emby.Common.Implementations.HttpClientManager httpWebRequest.ContentType = options.RequestContentType ?? "application/x-www-form-urlencoded"; +#if NET46 httpWebRequest.ContentLength = bytes.Length; - httpWebRequest.GetRequestStream().Write(bytes, 0, bytes.Length); +#endif + (await httpWebRequest.GetRequestStreamAsync().ConfigureAwait(false)).Write(bytes, 0, bytes.Length); } if (options.ResourcePool != null) @@ -885,6 +919,7 @@ namespace Emby.Common.Implementations.HttpClientManager private Task<WebResponse> GetResponseAsync(WebRequest request, TimeSpan timeout) { +#if NET46 var taskCompletion = new TaskCompletionSource<WebResponse>(); Task<WebResponse> asyncTask = Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null); @@ -897,6 +932,9 @@ namespace Emby.Common.Implementations.HttpClientManager asyncTask.ContinueWith(callback.OnError, TaskContinuationOptions.OnlyOnFaulted); return taskCompletion.Task; +#endif + + return request.GetResponseAsync(); } private static void TimeoutCallback(object state, bool timedOut) |
