diff --git a/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs b/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs index 1b775552e..850ec2d63 100644 --- a/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs +++ b/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs @@ -45,7 +45,11 @@ public ManagedHttpDispatcher(IHttpProxySettingsProvider proxySettingsProvider, public HttpResponse GetResponse(HttpRequest request, CookieContainer cookies) { - var requestMessage = new HttpRequestMessage(request.Method, (Uri)request.Url); + var requestMessage = new HttpRequestMessage(request.Method, (Uri)request.Url) + { + Version = HttpVersion.Version20, + VersionPolicy = HttpVersionPolicy.RequestVersionOrLower + }; requestMessage.Headers.UserAgent.ParseAdd(_userAgentBuilder.GetUserAgent(request.UseSimplifiedUserAgent)); requestMessage.Headers.ConnectionClose = !request.ConnectionKeepAlive; @@ -122,7 +126,7 @@ public HttpResponse GetResponse(HttpRequest request, CookieContainer cookies) headers.Add(responseMessage.Content.Headers.ToNameValueCollection()); - return new HttpResponse(request, new HttpHeader(headers), data, responseMessage.StatusCode); + return new HttpResponse(request, new HttpHeader(headers), data, responseMessage.StatusCode, responseMessage.Version); } } @@ -159,6 +163,8 @@ protected virtual System.Net.Http.HttpClient CreateHttpClient(HttpProxySettings var client = new System.Net.Http.HttpClient(handler) { + DefaultRequestVersion = HttpVersion.Version20, + DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrLower, Timeout = Timeout.InfiniteTimeSpan }; diff --git a/src/NzbDrone.Common/Http/HttpResponse.cs b/src/NzbDrone.Common/Http/HttpResponse.cs index 2d3b169f5..ddab6f435 100644 --- a/src/NzbDrone.Common/Http/HttpResponse.cs +++ b/src/NzbDrone.Common/Http/HttpResponse.cs @@ -9,28 +9,31 @@ namespace NzbDrone.Common.Http { public class HttpResponse { - private static readonly Regex RegexSetCookie = new Regex("^(.*?)=(.*?)(?:;|$)", RegexOptions.Compiled); + private static readonly Regex RegexSetCookie = new ("^(.*?)=(.*?)(?:;|$)", RegexOptions.Compiled); - public HttpResponse(HttpRequest request, HttpHeader headers, byte[] binaryData, HttpStatusCode statusCode = HttpStatusCode.OK) + public HttpResponse(HttpRequest request, HttpHeader headers, byte[] binaryData, HttpStatusCode statusCode = HttpStatusCode.OK, Version version = null) { Request = request; Headers = headers; ResponseData = binaryData; StatusCode = statusCode; + Version = version; } - public HttpResponse(HttpRequest request, HttpHeader headers, string content, HttpStatusCode statusCode = HttpStatusCode.OK) + public HttpResponse(HttpRequest request, HttpHeader headers, string content, HttpStatusCode statusCode = HttpStatusCode.OK, Version version = null) { Request = request; Headers = headers; ResponseData = Headers.GetEncodingFromContentType().GetBytes(content); _content = content; StatusCode = statusCode; + Version = version; } public HttpRequest Request { get; private set; } public HttpHeader Headers { get; private set; } public HttpStatusCode StatusCode { get; private set; } + public Version Version { get; private set; } public byte[] ResponseData { get; private set; } private string _content; @@ -84,7 +87,7 @@ public Dictionary GetCookies() public override string ToString() { - var result = string.Format("Res: [{0}] {1}: {2}.{3} ({4} bytes)", Request.Method, Request.Url, (int)StatusCode, StatusCode, ResponseData?.Length ?? 0); + var result = $"Res: HTTP/{Version} [{Request.Method}] {Request.Url}: {(int)StatusCode}.{StatusCode} ({ResponseData?.Length ?? 0} bytes)"; if (HasHttpError && Headers.ContentType.IsNotNullOrWhiteSpace() && !Headers.ContentType.Equals("text/html", StringComparison.InvariantCultureIgnoreCase)) { @@ -99,7 +102,7 @@ public class HttpResponse : HttpResponse where T : new() { public HttpResponse(HttpResponse response) - : base(response.Request, response.Headers, response.ResponseData, response.StatusCode) + : base(response.Request, response.Headers, response.ResponseData, response.StatusCode, response.Version) { Resource = Json.Deserialize(response.Content); }