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

如何在WSO2 APIM的Script Mediator中用JavaScript发送HTTP请求?

问题

在WSO2 APIM的内联Script Mediator中尝试使用fetch、XMLHttpRequest、jQuery发送HTTP请求时遇到以下问题:

  • XMLHttpRequest提示“未定义”
  • jQuery提示“$未定义”
  • fetch出现语法错误

错误日志:

[2022-08-25 15:53:25,508] ERROR - ScriptMediator {api:run:v1} The script engine returned an
error executing the inlined js script function mediate
com.sun.phobos.script.util.ExtendedScriptException: org.mozilla.javascript.EcmaError:
ReferenceError: "$" is not defined. (#5) in at line number 5

使用的Mediator代码:

<script language="js" source="https://code.jquery.com/jquery-1.7.1.min.js">
<![CDATA[
print("before sent########################################");

$.get("http://run.mocky.io/v2/5185415ba171ea3a00704eed", function(data, status){
print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");

print("Data: DDDDDDDDDDDDDDDDD" + data + "\nStatus: " + status);
});

print("sent########################################");
]]>
</script>
解决方案

为什么之前的方法行不通

WSO2 Script Mediator使用的是Rhino JavaScript引擎,运行在JVM环境而非浏览器环境:

  • XMLHttpRequest、fetch是浏览器专属API,Rhino引擎不支持
  • jQuery依赖浏览器DOM和XHR环境,无法在Rhino中直接加载使用

正确实现方式

有两种可靠的方法在WSO2 APIM中发送HTTP请求:

1. Script Mediator结合Java类(脚本内处理场景)

Rhino允许直接调用Java类,可使用org.apache.commons.httpclient或java.net相关类发送请求,示例代码:

<script language="js">
<![CDATA[
importPackage(org.apache.commons.httpclient);
importPackage(org.apache.commons.httpclient.methods);

var client = new HttpClient();
var getMethod = new GetMethod("http://run.mocky.io/v2/5185415ba171ea3a00704eed");

try {
    var statusCode = client.executeMethod(getMethod);
    if (statusCode == HttpStatus.SC_OK) {
        var response = getMethod.getResponseBodyAsString();
        print("Response Data: " + response);
    } else {
        print("Request failed with status: " + statusCode);
    }
} finally {
    getMethod.releaseConnection();
}
]]>
</script>

注:commons-httpclient依赖包默认已包含在WSO2 APIM环境中,无需额外添加。

2. 使用Call Mediator(符合WSO2集成规范)

若无需在脚本内处理请求逻辑,推荐使用WSO2原生的Call Mediator,它专门用于发送HTTP/S请求,配置简洁且易维护:

<call>
    <endpoint>
        <address uri="http://run.mocky.io/v2/5185415ba171ea3a00704eed"/>
    </endpoint>
</call>
<!-- 后续处理示例:提取响应并打印 -->
<property name="RESPONSE_DATA" expression="$body"/>
<log level="custom">
    <property name="Response" expression="$ctx:RESPONSE_DATA"/>
</log>

额外提示

  • 避免在Script Mediator中使用浏览器端JS API,优先选用WSO2原生Mediator或Java类
  • 若需复杂请求配置(如自定义请求头、请求体),Call Mediator支持更丰富的扩展选项

内容的提问来源于stack exchange,提问作者m.feyzollahi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:57:28