我试图使用Mozilla /犀牛JS引擎,以测试在命令行中一些SOAP请求。但是,没有任何用于发出请求的正常对象(XMLHttpRequest,HttpRequest)似乎可用。为什么是这样?我可以导入库吗?使用RHINO JS引擎发出HTTP请求
回答
你有可能会找到一个库导入,你也可以写自己在Java中,让他们提供给你的犀牛实例,这取决于你如何使用它。请记住Rhino只是一个Javascript语言引擎。它没有DOM,可以这么说,并不具有“网络意识”。
但是,因为听起来你是在做这个测试/实验的目的,而且你可能会更有效率而不必重新发明轮子,所以我强烈建议你只下载Node.js并且看到request module(用于发出HTTP请求)或any of the various SOAP modules。
你可以做一吨多用Node.js的,但你也可以使用它作为一个非常简单的转轮Javascript文件也是如此。不管你应该离开犀牛。它已经很老了,并且不再受到真正的支持,特别是现在即使使用JDK8,javax.script支持也会切换到Nashorn引擎。
UPDATE:如果你真的想给它一个去(如果你正在准备猴子与Java左右),你可能看this SO question及其答案。但是除非你是一个受虐狂的人,否则我认为你会走上一条不同的道路更开心。
我实际上是在寻找这个,因为我试图从VMWARE的vCenter Orchestrator进行SOAP调用,并且源使用其SOAP插件不支持的WSDL格式。 VCO提供了Rhino JS引擎,因为它是脚本引擎,所以我认为我可以用这种方式绕过它,但似乎没有。 – etsauer
我第一次没有完全阅读你的评论。嗯。从看他们的插件,不幸的是只提供'更高级别'。你应该联系他们的支持,看看他们是否会提供一个HTTP,而不是只提供专用的SOAP和REST插件。 –
顺便说一句,也许除了传统的支持,你可以看看他们的实验室家伙是否会回应任何事情。这似乎是他们抛出不受支持的小部件的地方 - 也许有人可以帮你一个忙。 [VMWare实验室](https://labs.vmware.com/tag/rest?cat=1) –
实际上,我是能够做到这一点使用Orchestrator的5.1与“编脚本任务”对象和的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;
我能得到它仅使用犀牛用下面的代码工作。
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. 在任何其他请求之前发出$ http请求Angular JS
- 2. 使用Titanium.Network.createHTTPClient()发出HTTP-GET请求
- 3. 使用套接字发出Http请求
- 4. 使用Arduino发出http POST请求
- 5. 发出HTTP请求UDP-like
- 6. HTTP请求 - 外部url请求烬js
- 7. Acync JS HTTP请求咨询请求
- 8. 查找用户发出的http请求
- 9. 用曲奇向Golang发出HTTP请求
- 10. 用Netty发出一个http请求
- 11. 用Elixir和Phoenix发出HTTP请求
- 12. 我可以发出仅使用HTTP/2的HTTP请求吗?
- 13. Go App引擎oauth2请求
- 14. 同一个js文件发出的多个http请求
- 15. 发送HTTP请求
- 16. 引发空异常的HTTP请求
- 17. 使用Ruby发出HTTP请求时发生EOF错误
- 18. 如何从我的android项目向Google应用引擎发送HTTP Post请求?
- 19. 使用node.js发出一个HTTP请求抛出EAFNOSUPPORT
- 20. Python:同时发出多个HTTP请求
- 21. 用swift发送http请求
- 22. 用Java转发HTTP请求
- 23. 使用HTTP请求
- 24. Http请求/并发?
- 25. Silverlight只发出一个http请求
- 26. 从服务器端发出HTTP请求
- 27. 通过C#代码发出http请求?
- 28. 通过Lambda Func发出Http请求
- 29. urllib2可以发出HTTP/1.1请求吗?
- 30. 谷歌应用程序引擎 - 找出当前请求达到app引擎
'没有作出请求(XMLHttpRequest的,HttpRequest的)'正常,其中正常的对象?你认为犀牛是什么? JAVASCRIPT不是DOM! XMLHttpRequest是一个DOM API,它与javascript无关,它不是JavaScript规范的一部分,JavaScript引擎不必实现DOM,Rhino不会。 – mpm
为了公平地使用原始的海报,我们可以说几十亿安装的javascript实现,包括每个现代网络浏览器,其中大多数开发者将安装四到五个,大多数计算机至少有一个,90%或更多他们有一个DOM。所以,可以说,当你使用Javascript时,OP提到的对象通常是可用的。这不是一个不寻常的混乱点,可以轻轻纠正。 –