다운로드한 XML을 스트림으로 .NET XmlReader에 전달
원래 URL을 다시 가져오게 하는 대신 프록시된 응답 스트림을 XML 파서에 전달하세요.
HTTP 클라이언트는 올바른 프록시를 통해 XML을 다운로드합니다. 다음 줄은 원래 URL에서 XML 판독기를 만듭니다. 그 줄은 다운로드한 데이터를 구문 분석하는 대신 또 다른 가져오기를 시작합니다.
이미 의도한 경로로 구성된 클라이언트라면 해당 응답 스트림을 파서에 전달하세요:
using var response = await client.GetAsync(documentUri);
response.EnsureSuccessStatusCode();
using var stream = await response.Content.ReadAsStreamAsync();
var settings = new XmlReaderSettings
{
DtdProcessing = DtdProcessing.Prohibit,
XmlResolver = null
};
using var reader = XmlReader.Create(stream, settings, documentUri.AbsoluteUri);
var document = XDocument.Load(reader);
관련 네임스페이스는 System.Xml과 System.Xml.Linq입니다. 예제는 DTD 처리와 외부 확인을 의도적으로 비활성화합니다. 같은 클라이언트를 통해 임의의 외부 엔터티를 가져오는 방법은 아닙니다.
기본 URI는 문서의 위치 메타데이터를 보존합니다. 승인된 구문 분석 또는 유효성 검사 워크플로가 외부 스키마나 다른 종속성을 실제로 가져온다면, 그 가져오기에는 별도의 명시적 확인기와 라우팅 설계가 필요합니다.
첫 번째로 성공한 클라이언트의 암호를 바꿔서 두 번째 네트워크 실패를 진단하지 마세요. 파서가 스트림을 받았는지 URL을 받았는지 확인한 다음 추가 리소스는 별도로 추적하세요.