使用RHINO js引擎发出http请求

时间:2014-03-03 21:33:07

标签: javascript rhino

我正在尝试使用Mozilla / Rhino js引擎在命令行中测试一些SOAP请求。但是,用于发出请求的正常对象(XMLHttpRequest,HttpRequest)似乎都不可用。为什么是这样?我可以导入库吗?

3 个答案:

答案 0 :(得分:4)

我能够使用以下代码使用Rhino来实现它。

var post = new org.apache.commons.httpclient.methods.PostMethod("https://someurl/and/path/");
var client = new org.apache.commons.httpclient.HttpClient();

// ---- Authentication ---- //
var creds = new org.apache.commons.httpclient.UsernamePasswordCredentials("username", "password");
client.getParams().setAuthenticationPreemptive(true);
client.getState().setCredentials(org.apache.commons.httpclient.auth.AuthScope.ANY, creds);
// -------------------------- //

post.setRequestHeader("Content-type", "application/xml");
post.setRequestEntity(new org.apache.commons.httpclient.methods.StringRequestEntity(buildXML(), "text/plain", "ASCII" ));

var status = client.executeMethod(post);
var br = new java.io.BufferedReader(new java.io.InputStreamReader(post.getResponseBodyAsStream()));
var response = "";
var line = br.readLine();
while(line != null){
    response = response + line;
    line = br.readLine();
}

post.releaseConnection();

答案 1 :(得分:0)

您可能会找到要导入的库,您也可以使用Java编写自己的库,并将它们提供给您的rhino实例,具体取决于您使用它的方式。请记住,Rhino只是一个Javascript语言引擎。它没有DOM,并且根本不具备“网络感知”。

然而,由于听起来你是为了测试/实验目的这样做,并且你可能会更高效,不必重新发明轮子这样做,我强烈建议你只需下载{{3}并查看Node.js(用于发出HTTP请求)或request module

您可以使用Node.js进行更多操作,但您也可以将其用作Javascript文件的非常简单的运行器。无论你是否应该离开Rhino。它已经很老了,不再支持了,特别是现在使用JDK8,即使javax.script支持也会切换到Nashorn引擎。

更新:如果你真的想试试(如果你准备好用Java),你可以看看any of the various SOAP modules及其答案。但除非你是一个受虐狂的人,否则我认为你会更开心地采取不同的方式。

答案 2 :(得分:0)

我实际上可以使用Orchestrator 5.1和#Scriptable任务来做到这一点。对象与Zabbix API接口:

var urlObject = new URL(url);
var jsonString = JSON.stringify({ jsonrpc: '2.0', method: 'user.login', params: { user: 'username', password: 'password' }, id: 1 });

urlObject.contentType = "application/json";
result = urlObject.postContent(jsonString);

System.log(result);

var authenticationToken = JSON.parse(result).result;