如何在XSLT中访问需请求头认证的API端点?
XSLT 3.0 添加请求头访问外部资源的方案
XSLT 3.0 原生的document()函数确实不支持直接为请求添加自定义头信息,但可以通过以下几种方式实现需求:
1. 使用 XPath 3.1 的 fn:fetch() 函数
这是XSLT 3.0结合XPath 3.1提供的原生解决方案,支持自定义HTTP请求头、方法等参数。示例代码如下:
<xsl:variable name="api-data" select="fetch( 'https://api.domain.com/call_x/id', map { 'headers': map { 'api-key': 'abcd1234' }, 'method': 'GET', 'accept': 'application/xml' } )"/>
注意:需要你的XSLT处理器支持XPath 3.1,比如Saxon 9.8及以上版本。
2. 利用处理器扩展函数
不同的XSLT处理器提供了专属扩展来处理复杂HTTP请求:
- Saxon:可以使用
saxon:send-http-request扩展函数,支持设置请求头、请求体、认证信息等。 - Xalan:可通过Java自定义扩展或实现
URIResolver接口,拦截资源请求并添加所需头信息。
3. 自定义 URIResolver(Java 平台通用)
如果基于Java环境运行XSLT,可以实现javax.xml.transform.URIResolver接口,在解析资源时手动构造带请求头的HTTP请求。在XSLT中调用document('custom:api-endpoint'),由自定义Resolver处理实际的请求逻辑。
补充:原生
document()函数仅支持基础URL访问,无法直接配置请求头,上述方案是更灵活的替代实现。
内容的提问来源于stack exchange,提问作者Feargal Hogan
相关产品推荐
相关产品推荐

