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 @@ +