Exemple #1
0
        public async Task <XmlDocumentResponse?> UrlGetToXmlDocument(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));
            }

            XmlDocumentResponse?result = null;

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

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

                    break;
                }

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

                    break;
                }

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

                XmlDocument xmlDocument = new XmlDocument();

                try {
                    xmlDocument.Load(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 #2
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);
        }