Exemple #1
0
        internal async Task <ObjectResponse <T> > UrlPostToJsonObject <T>(string request, IReadOnlyCollection <KeyValuePair <string, string> > data = null, string referer = null, byte maxTries = MaxTries) where T : class
        {
            if (string.IsNullOrEmpty(request) || (maxTries == 0))
            {
                ArchiLogger.LogNullError(nameof(request) + " || " + nameof(maxTries));
                return(null);
            }

            StringResponse response = await UrlPostToString(request, data, referer, maxTries).ConfigureAwait(false);

            if (string.IsNullOrEmpty(response?.Content))
            {
                return(null);
            }

            T obj;

            try {
                obj = JsonConvert.DeserializeObject <T>(response.Content);
            } catch (JsonException e) {
                ArchiLogger.LogGenericException(e);

                if (Debugging.IsUserDebugging)
                {
                    ArchiLogger.LogGenericDebug(string.Format(Strings.Content, response.Content));
                }

                return(null);
            }

            return(new ObjectResponse <T>(response, obj));
        }
Exemple #2
0
        internal async Task <XmlResponse> UrlGetToXml(string request, string referer = null, byte maxTries = MaxTries)
        {
            if (string.IsNullOrEmpty(request) || (maxTries == 0))
            {
                ArchiLogger.LogNullError(nameof(request) + " || " + nameof(maxTries));
                return(null);
            }

            StringResponse response = await UrlGetToString(request, referer, maxTries).ConfigureAwait(false);

            if (string.IsNullOrEmpty(response?.Content))
            {
                return(null);
            }

            XmlDocument xmlDocument = new XmlDocument();

            try {
                xmlDocument.LoadXml(response.Content);
            } catch (XmlException e) {
                ArchiLogger.LogGenericException(e);
                return(null);
            }

            return(new XmlResponse(response, xmlDocument));
        }
Exemple #3
0
        internal async Task <ObjectResponse <T> > UrlGetToObjectRetry <T>(string request, string referer = null)
        {
            if (string.IsNullOrEmpty(request))
            {
                ArchiLogger.LogNullError(nameof(request));
                return(null);
            }

            StringResponse response = await UrlGetToStringRetry(request, referer).ConfigureAwait(false);

            if (response == null)
            {
                return(null);
            }

            T obj;

            try {
                obj = JsonConvert.DeserializeObject <T>(response.Content);
            } catch (JsonException e) {
                ArchiLogger.LogGenericException(e);

                if (Debugging.IsUserDebugging)
                {
                    ArchiLogger.LogGenericDebug(string.Format(Strings.Content, response.Content));
                }

                return(null);
            }

            return(new ObjectResponse <T>(response, obj));
        }
            internal XmlDocumentResponse([NotNull] StringResponse stringResponse, XmlDocument content) : base(stringResponse)
            {
                if (stringResponse == null)
                {
                    throw new ArgumentNullException(nameof(stringResponse));
                }

                Content = content;
            }
            internal HtmlDocumentResponse([NotNull] StringResponse stringResponse) : base(stringResponse)
            {
                if (stringResponse == null)
                {
                    throw new ArgumentNullException(nameof(stringResponse));
                }

                Content = StringToHtmlDocument(stringResponse.Content);
            }
Exemple #6
0
            internal ObjectResponse(StringResponse stringResponse, T content) : base(stringResponse)
            {
                if (stringResponse == null)
                {
                    throw new ArgumentNullException(nameof(stringResponse));
                }

                Content = content;
            }
Exemple #7
0
        public async Task <XmlDocumentResponse> UrlGetToXmlDocument(string request, string referer = null, ERequestOptions requestOptions = ERequestOptions.None, byte maxTries = MaxTries)
        {
            if (string.IsNullOrEmpty(request) || (maxTries == 0))
            {
                ArchiLogger.LogNullError(nameof(request) + " || " + nameof(maxTries));

                return(null);
            }

            XmlDocumentResponse result = null;

            for (byte i = 0; i < maxTries; i++)
            {
                StringResponse response = await UrlGetToString(request, referer, requestOptions | ERequestOptions.ReturnClientErrors, 1).ConfigureAwait(false);

                // ReSharper disable once UseNullPropagationWhenPossible - false check
                if (response == null)
                {
                    continue;
                }

                if (response.StatusCode.IsClientErrorCode())
                {
                    if (requestOptions.HasFlag(ERequestOptions.ReturnClientErrors))
                    {
                        result = new XmlDocumentResponse(response);
                    }

                    break;
                }

                if (string.IsNullOrEmpty(response.Content))
                {
                    continue;
                }

                XmlDocument xmlDocument = new XmlDocument();

                try {
                    xmlDocument.LoadXml(response.Content);
                } catch (XmlException e) {
                    ArchiLogger.LogGenericWarningException(e);

                    continue;
                }

                return(new XmlDocumentResponse(response, xmlDocument));
            }

            if (maxTries > 1)
            {
                ArchiLogger.LogGenericWarning(string.Format(Strings.ErrorRequestFailedTooManyTimes, maxTries));
                ArchiLogger.LogGenericDebug(string.Format(Strings.ErrorFailingRequest, request));
            }

            return(result);
        }
Exemple #8
0
        internal async Task <HtmlDocumentResponse> UrlPostToHtmlDocument(string request, IReadOnlyCollection <KeyValuePair <string, string> > data = null, string referer = null, byte maxTries = MaxTries)
        {
            if (string.IsNullOrEmpty(request) || (maxTries == 0))
            {
                ArchiLogger.LogNullError(nameof(request) + " || " + nameof(maxTries));
                return(null);
            }

            StringResponse response = await UrlPostToString(request, data, referer, maxTries).ConfigureAwait(false);

            return(response != null ? new HtmlDocumentResponse(response) : null);
        }
Exemple #9
0
        internal async Task <HtmlDocumentResponse> UrlGetToHtmlDocument(string request, string referer = null, byte maxTries = MaxTries)
        {
            if (string.IsNullOrEmpty(request) || (maxTries == 0))
            {
                ArchiLogger.LogNullError(nameof(request) + " || " + nameof(maxTries));
                return(null);
            }

            StringResponse response = await UrlGetToString(request, referer, maxTries).ConfigureAwait(false);

            return(response != null ? new HtmlDocumentResponse(response) : null);
        }
Exemple #10
0
        internal async Task <HtmlDocumentResponse> UrlGetToHtmlDocumentRetry(string request, string referer = null)
        {
            if (string.IsNullOrEmpty(request))
            {
                ArchiLogger.LogNullError(nameof(request));
                return(null);
            }

            StringResponse response = await UrlGetToStringRetry(request, referer).ConfigureAwait(false);

            return(response != null ? new HtmlDocumentResponse(response) : null);
        }
Exemple #11
0
        internal async Task <StringResponse?> UrlGetToString(string request, string?referer = null, ERequestOptions requestOptions = ERequestOptions.None, byte maxTries = MaxTries)
        {
            if (string.IsNullOrEmpty(request) || (maxTries == 0))
            {
                throw new ArgumentNullException(nameof(request) + " || " + nameof(maxTries));
            }

            StringResponse?result = null;

            for (byte i = 0; i < maxTries; i++)
            {
                using HttpResponseMessage? response = await InternalGet(request, referer).ConfigureAwait(false);

                if (response?.StatusCode.IsClientErrorCode() == true)
                {
                    if (requestOptions.HasFlag(ERequestOptions.ReturnClientErrors))
                    {
                        result = new StringResponse(response);
                    }

                    break;
                }

                if (response?.StatusCode.IsServerErrorCode() == true)
                {
                    if (requestOptions.HasFlag(ERequestOptions.ReturnServerErrors))
                    {
                        result = new StringResponse(response);
                    }

                    break;
                }

                if (response?.Content == null)
                {
                    continue;
                }

                return(new StringResponse(response, await response.Content.ReadAsStringAsync().ConfigureAwait(false)));
            }

            if (maxTries > 1)
            {
                ArchiLogger.LogGenericWarning(string.Format(Strings.ErrorRequestFailedTooManyTimes, maxTries));
                ArchiLogger.LogGenericDebug(string.Format(Strings.ErrorFailingRequest, request));
            }

            return(result);
        }
        public async Task <ObjectResponse <T> > UrlGetToJsonObject <T>(string request, string referer = null, byte maxTries = MaxTries) where T : class
        {
            if (string.IsNullOrEmpty(request) || (maxTries == 0))
            {
                ArchiLogger.LogNullError(nameof(request) + " || " + nameof(maxTries));

                return(null);
            }

            for (byte i = 0; i < maxTries; i++)
            {
                StringResponse response = await UrlGetToString(request, referer, 1).ConfigureAwait(false);

                if (string.IsNullOrEmpty(response?.Content))
                {
                    continue;
                }

                T obj;

                try {
                    obj = JsonConvert.DeserializeObject <T>(response.Content);
                } catch (JsonException e) {
                    ArchiLogger.LogGenericWarningException(e);

                    if (Debugging.IsUserDebugging)
                    {
                        ArchiLogger.LogGenericDebug(string.Format(Strings.Content, response.Content));
                    }

                    continue;
                }

                return(new ObjectResponse <T>(response, obj));
            }

            if (maxTries > 1)
            {
                ArchiLogger.LogGenericWarning(string.Format(Strings.ErrorRequestFailedTooManyTimes, maxTries));
                ArchiLogger.LogGenericDebug(string.Format(Strings.ErrorFailingRequest, request));
            }

            return(null);
        }
Exemple #13
0
        private async Task <StringResponse> UrlPostToString(string request, IReadOnlyCollection <KeyValuePair <string, string> > data = null, string referer = null, ERequestOptions requestOptions = ERequestOptions.None, byte maxTries = MaxTries)
        {
            if (string.IsNullOrEmpty(request) || (maxTries == 0))
            {
                ArchiLogger.LogNullError(nameof(request) + " || " + nameof(maxTries));

                return(null);
            }

            StringResponse result = null;

            for (byte i = 0; i < maxTries; i++)
            {
                using (HttpResponseMessage response = await InternalPost(request, data, referer).ConfigureAwait(false)) {
                    if (response == null)
                    {
                        continue;
                    }

                    if (response.StatusCode.IsClientErrorCode())
                    {
                        if (requestOptions.HasFlag(ERequestOptions.ReturnClientErrors))
                        {
                            result = new StringResponse(response);
                        }

                        break;
                    }

                    return(new StringResponse(response, await response.Content.ReadAsStringAsync().ConfigureAwait(false)));
                }
            }

            if (maxTries > 1)
            {
                ArchiLogger.LogGenericWarning(string.Format(Strings.ErrorRequestFailedTooManyTimes, maxTries));
                ArchiLogger.LogGenericDebug(string.Format(Strings.ErrorFailingRequest, request));
            }

            return(result);
        }
        public async Task <XmlDocumentResponse> UrlGetToXmlDocument(string request, string referer = null, byte maxTries = MaxTries)
        {
            if (string.IsNullOrEmpty(request) || (maxTries == 0))
            {
                ArchiLogger.LogNullError(nameof(request) + " || " + nameof(maxTries));

                return(null);
            }

            for (byte i = 0; i < maxTries; i++)
            {
                StringResponse response = await UrlGetToString(request, referer, 1).ConfigureAwait(false);

                if (string.IsNullOrEmpty(response?.Content))
                {
                    continue;
                }

                XmlDocument xmlDocument = new XmlDocument();

                try {
                    xmlDocument.LoadXml(response.Content);
                } catch (XmlException e) {
                    ArchiLogger.LogGenericWarningException(e);

                    continue;
                }

                return(new XmlDocumentResponse(response, xmlDocument));
            }

            if (maxTries > 1)
            {
                ArchiLogger.LogGenericWarning(string.Format(Strings.ErrorRequestFailedTooManyTimes, maxTries));
                ArchiLogger.LogGenericDebug(string.Format(Strings.ErrorFailingRequest, request));
            }

            return(null);
        }
Exemple #15
0
        private async Task <StringResponse> UrlPostToStringRetry(string request, IReadOnlyCollection <KeyValuePair <string, string> > data = null, string referer = null)
        {
            if (string.IsNullOrEmpty(request))
            {
                ArchiLogger.LogNullError(nameof(request));
                return(null);
            }

            StringResponse response = null;

            for (byte i = 0; (i < MaxTries) && (response == null); i++)
            {
                response = await UrlPostToString(request, data, referer).ConfigureAwait(false);
            }

            if (response != null)
            {
                return(response);
            }

            ArchiLogger.LogGenericWarning(string.Format(Strings.ErrorRequestFailedTooManyTimes, MaxTries));
            ArchiLogger.LogGenericDebug(string.Format(Strings.ErrorFailingRequest, request));
            return(null);
        }
Exemple #16
0
        public async Task <ObjectResponse <T> > UrlPostToJsonObject <T>(string request, IReadOnlyCollection <KeyValuePair <string, string> > data = null, string referer = null, ERequestOptions requestOptions = ERequestOptions.None, byte maxTries = MaxTries) where T : class
        {
            if (string.IsNullOrEmpty(request) || (maxTries == 0))
            {
                ArchiLogger.LogNullError(nameof(request) + " || " + nameof(maxTries));

                return(null);
            }

            ObjectResponse <T> result = null;

            for (byte i = 0; i < maxTries; i++)
            {
                StringResponse response = await UrlPostToString(request, data, referer, requestOptions | ERequestOptions.ReturnClientErrors, 1).ConfigureAwait(false);

                if (response == null)
                {
                    return(null);
                }

                if (response.StatusCode.IsClientErrorCode())
                {
                    if (requestOptions.HasFlag(ERequestOptions.ReturnClientErrors))
                    {
                        result = new ObjectResponse <T>(response);
                    }

                    break;
                }

                if (string.IsNullOrEmpty(response.Content))
                {
                    continue;
                }

                T obj;

                try {
                    obj = JsonConvert.DeserializeObject <T>(response.Content);
                } catch (JsonException e) {
                    ArchiLogger.LogGenericWarningException(e);

                    if (Debugging.IsUserDebugging)
                    {
                        ArchiLogger.LogGenericDebug(string.Format(Strings.Content, response.Content));
                    }

                    continue;
                }

                return(new ObjectResponse <T>(response, obj));
            }

            if (maxTries > 1)
            {
                ArchiLogger.LogGenericWarning(string.Format(Strings.ErrorRequestFailedTooManyTimes, maxTries));
                ArchiLogger.LogGenericDebug(string.Format(Strings.ErrorFailingRequest, request));
            }

            return(result);
        }