本地文档在转换期间仍可能引发 407。它的 XML 可能引用某个 DTD、架构或实体,渲染器也可能获取样式或图片。失败的客户端可能位于该解析器内部,发生在原始下载完成之后。

保留异常堆栈和请求的 URI,再将其与输入声明或资源引用进行比对。向标准主机发起的 DTD 请求与页面请求是两项不同的操作。HTML 转 PDF 时也可能在获取远程资源的过程中失败。

对于契约禁止 DTD 和外部解析的 .NET XmlReader 输入,请使用:

var settings = new XmlReaderSettings
{
    DtdProcessing = DtdProcessing.Prohibit,
    XmlResolver = null
};

把这些设置传给真正解析文档的组件。DtdProcessing 决定如何处理 DTD;XmlResolver 控制外部访问。Prohibit 会拒绝含 DTD 的文档——它并不会删除该声明。如果工作流确实需要 DTD,请选择已批准的本地解析方式或显式路由的 resolver。

让默认值随 API/运行时而定。XmlReaderSettings 默认使用 Prohibit,其默认 resolver 从 .NET Framework 4.5.2 起改为 null。第三方转换器可能覆盖这些默认值,或改用其他解析器。

把 XHTML 声明改为 HTML doctype 可能影响某个转换器,但不会配置它的代理。明确所需资源及其加载策略;初始页面客户端的身份验证并不会验证这第二个客户端。

相关文章