Saxon解析的XSL样式表无法访问远程资源

时间:2017-11-17 13:19:44

标签: xslt http-status-code-403 saxon

尝试使用Saxon HE解析XSLT 2.0样式表,收到以下错误:

Error on line 44 column 168 
  XTSE0165: I/O error reported by XML parser processing
  http://www.loc.gov/standards/mods/inc/mimeType.xsl: Server returned HTTP response code:
  403 for URL: http://www.loc.gov/standards/mods/inc/mimeType.xsl

此样式表包含它尝试检索的一些远程资源:

<xsl:include href="http://www.loc.gov/standards/mods/inc/dcmiType.xsl"/>
<xsl:include href="http://www.loc.gov/standards/mods/inc/mimeType.xsl"/>
<xsl:include href="http://www.loc.gov/standards/mods/inc/csdgm.xsl"/>
<xsl:include href="http://www.loc.gov/standards/mods/inc/forms.xsl"/>
<xsl:include href="http://www.loc.gov/standards/mods/inc/iso3166-1.xsl"/>
<xsl:include href="http://www.loc.gov/standards/mods/inc/iso639-2.xsl"/>

但是,我已确认所有链接都有效并可通过浏览器或卷曲检索。此外,当我在localhost上提供这些文件并相应更改<xsl:include>时,我不会收到403错误。

我的问题是,是否有某种撒克逊或Java设置阻止Saxon HE访问localhost以外的资源?

非常感谢任何建议。

更新:我正在使用pyjxslt作为服务器执行撒克逊转换,在localhost:6767运行。

1 个答案:

答案 0 :(得分:0)

我尝试使用XQuery命令行中的doc()函数,使用&#34; Charles&#34;监控HTTP流量。

详细的HTTP响应表明该网站正在使用Cloudflare限制访问,并且已根据您的浏览器签名拒绝访问&#34;。

因此,除非您可以插入某种代理来更改请求中的浏览器签名,或者说服网站的所有者他们的安全策略没有意义,否则您可能会失去运气。

我注意到的一件事是Safari包括&#34;接受application / xml&#34;在HTTP请求标头中,Java没有。除非请求标头声明它将接受XML,否则该网站可能以某种方式配置为不提供XML。我以前没有看到过这种情况,但这需要调查。

顺便提一下,默认情况下,Saxon不会直接调用Java API来获取文档;如果你使用标准(默认)URIResolver,那么这将创建一个包装请求的URL的InputSource对象,并将InputSource传递给XML解析器,然后调用Java来获取资源。我不知道XML解析器实际使用的是哪些Java API。但是如果你能找到一种有效的方法,你可以通过编写一个配置HTTP请求并直接获取InputStream的URIResolver来绕过这个。