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); }
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); }