diff --git a/src/NzbDrone.Common.Test/Http/HttpClientFixture.cs b/src/NzbDrone.Common.Test/Http/HttpClientFixture.cs index 643568acd..203171eb9 100644 --- a/src/NzbDrone.Common.Test/Http/HttpClientFixture.cs +++ b/src/NzbDrone.Common.Test/Http/HttpClientFixture.cs @@ -148,7 +148,7 @@ namespace NzbDrone.Common.Test.Http var request = new HttpRequest($"https://expired.badssl.com"); Assert.Throws(() => Subject.Execute(request)); - ExceptionVerification.ExpectedErrors(2); + ExceptionVerification.ExpectedErrors(1); } [Test] diff --git a/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs b/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs index 1a5e0cfae..013aa952a 100644 --- a/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs +++ b/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs @@ -1,5 +1,4 @@ using System; -using System.Diagnostics; using System.IO; using System.Net; using System.Net.Http; @@ -8,7 +7,6 @@ using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; -using NLog; using NzbDrone.Common.Cache; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http.Proxy; @@ -28,21 +26,18 @@ namespace NzbDrone.Common.Http.Dispatchers private readonly ICertificateValidationService _certificateValidationService; private readonly IUserAgentBuilder _userAgentBuilder; private readonly ICached _httpClientCache; - private readonly Logger _logger; private readonly ICached _credentialCache; public ManagedHttpDispatcher(IHttpProxySettingsProvider proxySettingsProvider, - ICreateManagedWebProxy createManagedWebProxy, - ICertificateValidationService certificateValidationService, - IUserAgentBuilder userAgentBuilder, - ICacheManager cacheManager, - Logger logger) + ICreateManagedWebProxy createManagedWebProxy, + ICertificateValidationService certificateValidationService, + IUserAgentBuilder userAgentBuilder, + ICacheManager cacheManager) { _proxySettingsProvider = proxySettingsProvider; _createManagedWebProxy = createManagedWebProxy; _certificateValidationService = certificateValidationService; _userAgentBuilder = userAgentBuilder; - _logger = logger; _httpClientCache = cacheManager.GetCache(typeof(ManagedHttpDispatcher)); _credentialCache = cacheManager.GetCache(typeof(ManagedHttpDispatcher), "credentialcache"); @@ -103,49 +98,32 @@ namespace NzbDrone.Common.Http.Dispatchers var httpClient = GetClient(request.Url); - HttpResponseMessage responseMessage; - - try + using var responseMessage = httpClient.Send(requestMessage, HttpCompletionOption.ResponseHeadersRead, cts.Token); { - responseMessage = httpClient.Send(requestMessage, cts.Token); - } - catch (HttpRequestException e) - { - _logger.Error(e, "HttpClient error"); - throw; - } + byte[] data = null; - byte[] data = null; - - using (var responseStream = responseMessage.Content.ReadAsStream()) - { - if (responseStream != null && responseStream != Stream.Null) + try { - try + if (request.ResponseStream != null && responseMessage.StatusCode == HttpStatusCode.OK) { - if (request.ResponseStream != null && responseMessage.StatusCode == HttpStatusCode.OK) - { - // A target ResponseStream was specified, write to that instead. - // But only on the OK status code, since we don't want to write failures and redirects. - responseStream.CopyTo(request.ResponseStream); - } - else - { - data = responseStream.ToBytes(); - } + responseMessage.Content.CopyTo(request.ResponseStream, null, cts.Token); } - catch (Exception ex) + else { - throw new WebException("Failed to read complete http response", ex, WebExceptionStatus.ReceiveFailure, null); + data = responseMessage.Content.ReadAsByteArrayAsync(cts.Token).GetAwaiter().GetResult(); } } + catch (Exception ex) + { + throw new WebException("Failed to read complete http response", ex, WebExceptionStatus.ReceiveFailure, null); + } + + var headers = responseMessage.Headers.ToNameValueCollection(); + + headers.Add(responseMessage.Content.Headers.ToNameValueCollection()); + + return new HttpResponse(request, new HttpHeader(headers), data, responseMessage.StatusCode); } - - var headers = responseMessage.Headers.ToNameValueCollection(); - - headers.Add(responseMessage.Content.Headers.ToNameValueCollection()); - - return new HttpResponse(request, new HttpHeader(headers), data, responseMessage.StatusCode); } protected virtual System.Net.Http.HttpClient GetClient(HttpUri uri) diff --git a/src/NzbDrone.Core.Test/Framework/CoreTest.cs b/src/NzbDrone.Core.Test/Framework/CoreTest.cs index b1213cb6e..b43854c95 100644 --- a/src/NzbDrone.Core.Test/Framework/CoreTest.cs +++ b/src/NzbDrone.Core.Test/Framework/CoreTest.cs @@ -26,7 +26,7 @@ namespace NzbDrone.Core.Test.Framework Mocker.SetConstant(new HttpProxySettingsProvider(Mocker.Resolve())); Mocker.SetConstant(new ManagedWebProxyFactory(Mocker.Resolve())); Mocker.SetConstant(new X509CertificateValidationService(Mocker.Resolve(), TestLogger)); - Mocker.SetConstant(new ManagedHttpDispatcher(Mocker.Resolve(), Mocker.Resolve(), Mocker.Resolve(), Mocker.Resolve(), Mocker.Resolve(), TestLogger)); + Mocker.SetConstant(new ManagedHttpDispatcher(Mocker.Resolve(), Mocker.Resolve(), Mocker.Resolve(), Mocker.Resolve(), Mocker.Resolve())); Mocker.SetConstant(new HttpClient(Array.Empty(), Mocker.Resolve(), Mocker.Resolve(), Mocker.Resolve(), TestLogger)); Mocker.SetConstant(new LidarrCloudRequestBuilder()); Mocker.SetConstant(Mocker.Resolve());