From ae6d920e2a049e6b4993dfec62e384809fe83b30 Mon Sep 17 00:00:00 2001 From: Taloth Saldono Date: Wed, 14 Nov 2018 21:08:07 +0100 Subject: [PATCH] Updated error message if skyhook and other services respond with html content. closes #2817 --- src/NzbDrone.Common/Http/HttpClient.cs | 10 ++++++++++ src/NzbDrone.Common/Http/HttpException.cs | 12 +++++++++--- .../Http/UnexpectedHtmlContentException.cs | 13 +++++++++++++ src/NzbDrone.Common/NzbDrone.Common.csproj | 1 + 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 src/NzbDrone.Common/Http/UnexpectedHtmlContentException.cs diff --git a/src/NzbDrone.Common/Http/HttpClient.cs b/src/NzbDrone.Common/Http/HttpClient.cs index 45ff53ae3..58896af48 100644 --- a/src/NzbDrone.Common/Http/HttpClient.cs +++ b/src/NzbDrone.Common/Http/HttpClient.cs @@ -267,6 +267,7 @@ namespace NzbDrone.Common.Http public HttpResponse Get(HttpRequest request) where T : new() { var response = Get(request); + CheckResponseContentType(response); return new HttpResponse(response); } @@ -285,7 +286,16 @@ namespace NzbDrone.Common.Http public HttpResponse Post(HttpRequest request) where T : new() { var response = Post(request); + CheckResponseContentType(response); return new HttpResponse(response); } + + private void CheckResponseContentType(HttpResponse response) + { + if (response.Headers.ContentType != null && response.Headers.ContentType.Contains("text/html")) + { + throw new UnexpectedHtmlContentException(response); + } + } } } diff --git a/src/NzbDrone.Common/Http/HttpException.cs b/src/NzbDrone.Common/Http/HttpException.cs index 759a104c1..005fab57a 100644 --- a/src/NzbDrone.Common/Http/HttpException.cs +++ b/src/NzbDrone.Common/Http/HttpException.cs @@ -7,13 +7,19 @@ namespace NzbDrone.Common.Http public HttpRequest Request { get; private set; } public HttpResponse Response { get; private set; } - public HttpException(HttpRequest request, HttpResponse response) - : base(string.Format("HTTP request failed: [{0}:{1}] [{2}] at [{3}]", (int)response.StatusCode, response.StatusCode, request.Method, request.Url)) + public HttpException(HttpRequest request, HttpResponse response, string message) + : base(message) { Request = request; Response = response; } + public HttpException(HttpRequest request, HttpResponse response) + : this(request, response, string.Format("HTTP request failed: [{0}:{1}] [{2}] at [{3}]", (int)response.StatusCode, response.StatusCode, request.Method, request.Url)) + { + + } + public HttpException(HttpResponse response) : this(response.Request, response) { @@ -30,4 +36,4 @@ namespace NzbDrone.Common.Http return base.ToString(); } } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Common/Http/UnexpectedHtmlContentException.cs b/src/NzbDrone.Common/Http/UnexpectedHtmlContentException.cs new file mode 100644 index 000000000..4264f7cfe --- /dev/null +++ b/src/NzbDrone.Common/Http/UnexpectedHtmlContentException.cs @@ -0,0 +1,13 @@ +using System; + +namespace NzbDrone.Common.Http +{ + public class UnexpectedHtmlContentException : HttpException + { + public UnexpectedHtmlContentException(HttpResponse response) + : base(response.Request, response, $"Site responded with browser content instead of api data. This disruption may be temporary, please try again later. [{response.Request.Url}]") + { + + } + } +} diff --git a/src/NzbDrone.Common/NzbDrone.Common.csproj b/src/NzbDrone.Common/NzbDrone.Common.csproj index 34f7bec43..cf854bdb6 100644 --- a/src/NzbDrone.Common/NzbDrone.Common.csproj +++ b/src/NzbDrone.Common/NzbDrone.Common.csproj @@ -177,6 +177,7 @@ +