You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XSLT中使用IBM Datapower dp:url-open函数调用HTTP方法

IBM DataPower 中使用 dp:url-open 调用不同HTTP方法的XSLT实现

基本原理

  • dp:url-open 是IBM DataPower提供的专属XSLT扩展函数,使用前需要先声明命名空间 http://www.datapower.com/extensions
  • 不同HTTP请求方法通过dp:url-open-target节点下的http标签的method属性指定,同时配合请求头、请求payload完成对应请求的构造
  • 函数返回值为包含响应头、响应体、状态码的节点集,可直接通过XPath提取所需内容

通用前置声明

所有示例都需要先引入如下命名空间,实际使用时将业务逻辑模板包裹在该样式表节点内:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:dp="http://www.datapower.com/extensions"
    extension-element-prefixes="dp">

    <!-- 业务逻辑模板写在此处 -->

</xsl:stylesheet>

各HTTP方法实现示例

GET 请求

GET请求通常用于查询资源,无需传递请求体,可直接将查询参数拼接在URL中:

<xsl:template match="/">
    <!-- 目标URL,可拼接查询参数 -->
    <xsl:variable name="targetUrl" select="'https://example.com/api/user?id=123'"/>
    <!-- 构造请求参数 -->
    <xsl:variable name="requestParams">
        <dp:url-open-target>
            <http method="GET" url="{$targetUrl}" cache="no">
                <headers>
                    <header name="Accept">application/json</header>
                </headers>
            </http>
        </dp:url-open-target>
    </xsl:variable>
    <!-- 发起请求,binaryNode表示返回二进制节点格式,适配任意响应类型 -->
    <xsl:variable name="response" select="dp:url-open($requestParams, 'binaryNode')"/>
    <!-- 输出响应体 -->
    <xsl:copy-of select="$response/dp:response/body"/>
</xsl:template>

cache="no"属性用于关闭GET请求默认缓存,可根据业务需求选择是否添加。

POST 请求

POST通常用于提交数据创建资源,需要指定请求体和对应的Content-Type头:

<xsl:template match="/">
    <xsl:variable name="targetUrl" select="'https://example.com/api/user'"/>
    <!-- 构造请求payload,此处示例为JSON格式 -->
    <xsl:variable name="postPayload">
        {
            "username": "test_user",
            "email": "test@example.com"
        }
    </xsl:variable>
    <xsl:variable name="requestParams">
        <dp:url-open-target>
            <http method="POST" url="{$targetUrl}">
                <headers>
                    <header name="Content-Type">application/json</header>
                    <header name="Accept">application/json</header>
                </headers>
                <body>
                    <xsl:copy-of select="$postPayload"/>
                </body>
            </http>
        </dp:url-open-target>
    </xsl:variable>
    <xsl:variable name="response" select="dp:url-open($requestParams, 'binaryNode')"/>
    <xsl:copy-of select="$response/dp:response/body"/>
</xsl:template>

PUT(CREATE)请求

PUT通常用于更新指定ID的资源,部分场景也用于创建指定ID的资源,逻辑与POST一致,仅修改method属性即可:

<xsl:template match="/">
    <xsl:variable name="targetUrl" select="'https://example.com/api/user/123'"/>
    <xsl:variable name="putPayload">
        {
            "email": "update@example.com"
        }
    </xsl:variable>
    <xsl:variable name="requestParams">
        <dp:url-open-target>
            <http method="PUT" url="{$targetUrl}">
                <headers>
                    <header name="Content-Type">application/json</header>
                </headers>
                <body>
                    <xsl:copy-of select="$putPayload"/>
                </body>
            </http>
        </dp:url-open-target>
    </xsl:variable>
    <xsl:variable name="response" select="dp:url-open($requestParams, 'binaryNode')"/>
</xsl:template>

DELETE 请求

DELETE用于删除指定资源,通常不需要传递请求体,部分特殊接口需要的话可参考POST的方式添加body节点:

<xsl:template match="/">
    <xsl:variable name="targetUrl" select="'https://example.com/api/user/123'"/>
    <xsl:variable name="requestParams">
        <dp:url-open-target>
            <http method="DELETE" url="{$targetUrl}">
                <headers>
                    <header name="Accept">application/json</header>
                </headers>
            </http>
        </dp:url-open-target>
    </xsl:variable>
    <xsl:variable name="response" select="dp:url-open($requestParams, 'binaryNode')"/>
    <!-- 示例:提取HTTP响应状态码 -->
    <xsl:variable name="httpCode" select="substring-before($response/dp:response/headers/header[@name='x-dp-response-code'], ' ')"/>
</xsl:template>

注意事项

  • 如果请求的是HTTPS接口,需要在DataPower中提前配置对应后端的SSL客户端配置,在http节点添加ssl-client-profile="你的SSL配置名"属性即可调用
  • 响应中内置的x-dp-response-code头值格式为状态码 原因短语,例如200 OK,可通过字符串截取获取纯状态码
  • 若后端返回XML格式数据,可将dp:url-open的第二个参数改为xml,直接返回XML节点集方便解析

内容的提问来源于stack exchange,提问作者toy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:15:03