Javascript XMLHttpRequest返回响应“;“未定义”;NodeJs中的状态为0
我正在向EJBCA web服务发送请求。请看下面我的代码。我得到Javascript XMLHttpRequest返回响应“;“未定义”;NodeJs中的状态为0,javascript,node.js,web-services,soap,xmlhttprequest,Javascript,Node.js,Web Services,Soap,Xmlhttprequest,我正在向EJBCA web服务发送请求。请看下面我的代码。我得到undefined作为响应,正在打印的状态为0 let XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0; const fs = require('fs'); let xmlhttp = new XMLHttpRequest(); xmlhttp.open('POST
undefined
作为响应,正在打印的状态为0
let XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
const fs = require('fs');
let xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'https://104.211.18.242/ejbca/ejbcaws/ejbcaws', true, 'ejbcaadmin', 'iBOTControls@123');
var strRequest = `
<x:Envelope
xmlns:x="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ws="http://ws.protocol.core.ejbca.org/">
<x:Header/>
<x:Body>
<ws:getAvailableCAs></ws:getAvailableCAs>
</x:Body>
</x:Envelope>
`;
xmlhttp.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
xmlhttp.setRequestHeader('Access-Control-Allow-Origin', '*');
xmlhttp.setRequestHeader('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, DELETE, OPTIONS');
xmlhttp.setRequestHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, x-client-key, x-client-token, x-client-secret, Authorization');
//send the SOAP request
xmlhttp.send(strRequest);
//Callback function for response
xmlhttp.onreadystatechange = function () {
console.log(xmlhttp.response) // returns undefined
console.log(xmlhttp.status) // prints 0
fs.writeFileSync('./response.txt', xmlhttp.responseXML)
}
让XMLHttpRequest=require('XMLHttpRequest')。XMLHttpRequest;
process.env['NODE\u TLS\u REJECT\u UNAUTHORIZED']=0;
常数fs=要求('fs');
设xmlhttp=newxmlhttprequest();
xmlhttp.open('POST','https://104.211.18.242/ejbca/ejbcaws/ejbcaws“,对,'ejbcaadmin',”iBOTControls@123');
变量strRequest=`
`;
setRequestHeader('Content-Type','text/xml;charset=utf-8');
setRequestHeader('Access-Control-Allow-Origin','*');
setRequestHeader('Access-Control-Allow-Methods','GET,POST,PATCH,PUT,DELETE,OPTIONS');
setRequestHeader('Access-Control-Allow-Headers','Origin,X-Requested-With,Content-Type,Accept,X-client-key,X-client-token,X-client-secret,Authorization');
//发送SOAP请求
发送(strRequest);
//用于响应的回调函数
xmlhttp.onreadystatechange=函数(){
console.log(xmlhttp.response)//返回未定义的
console.log(xmlhttp.status)//打印0
fs.writeFileSync('./response.txt',xmlhttp.responseXML)
}
向此web服务发送请求需要https客户端身份验证。当我通过浏览器发送请求时,我必须选择一个证书,然后我会收到200个响应。既然我没有在node.js中附加证书,它会失败吗?为什么要设置访问控制头?它们是响应头,在请求中没有位置……而且它们只适用于浏览器。为什么要麻烦呢?使用类似Axios的库
const response=wait axios.post(url,strequest)
,作业done@JeremyThille我像这样使用axioslet instance=axios.create({headers:{'Content type':'text/xml;charset=utf-8'}});实例.post('https://104.211.18.242/ejbca/ejbcaws/ejbcaws然后((res)=>{console.log(res.data)}).catch((e)=>{console.log(e)})
使用code EconReseties获取套接字挂起错误,我刚刚尝试用Postman调用API,它挂起了。我还遇到了插座挂断
。我认为它已断开/脱机。这是因为请求中未提供https客户端身份验证。通过浏览器访问api需要客户端证书,api才能正常工作。但我不知道如何通过node.js传递