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

如何在WSO2 API Manager 3.2的Script Mediator中记录请求头

解决方案:用Script Mediator或Log Mediator记录所有传输请求头

为什么你之前的代码返回null?

mc.getProperty("org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS")直接从Synapse消息上下文(mc)获取属性,但TRANSPORT_HEADERS实际存储在Axis2底层消息上下文中,而非Synapse上下文,所以直接调用会返回null。


方案1:用JavaScript Script Mediator获取并记录

将以下脚本放在对应序列的正确位置(入站头放inSequence开头,出站头放Send中介前):

// 获取Axis2底层消息上下文
var axis2Ctx = mc.getAxis2MessageContext();
// 获取传输头(入站用TRANSPORT_HEADERS,出站用OUT_TRANSPORT_HEADERS)
var headers = axis2Ctx.getProperty("TRANSPORT_HEADERS");

if (headers) {
    var logContent = "=== 所有传输请求头 ===\n";
    var keys = headers.keySet().iterator();
    while (keys.hasNext()) {
        var key = keys.next();
        logContent += `${key}: ${headers.get(key)}\n`;
    }
    // 输出到WSO2日志
    log.info(logContent);
} else {
    log.warn("未获取到传输请求头,请检查序列位置是否正确");
}
  • 若要记录API发往后端的出站请求头,将TRANSPORT_HEADERS替换为OUT_TRANSPORT_HEADERS即可。

方案2:用Log Mediator快速记录(更简洁)

无需写脚本,直接用Synapse内置的Log Mediator,支持一键输出所有传输头:

记录入站请求头(客户端→API)

<inSequence>
    <!-- 直接输出所有传输头 -->
    <log level="headers"/>
    
    <!-- 后续业务逻辑 -->
    <send>
        <endpoint>你的后端端点配置</endpoint>
    </send>
</inSequence>

自定义格式记录

如果需要更清晰的日志格式,用custom级别指定属性:

<log level="custom">
    <property name="入站传输请求头" expression="get-property('axis2', 'TRANSPORT_HEADERS')"/>
</log>
  • 同样,记录出站头时将TRANSPORT_HEADERS替换为OUT_TRANSPORT_HEADERS,并放在Send中介之前。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:45:40