Node.js Webservice拒绝对SOAP请求节点.js的访问
我试图在不使用节点中的任何库的情况下从web服务获取SOAP响应,但我的代码却一无所获。可以找到服务的WSDL。我在SoapUI中测试了该请求,并在批处理文件中使用了curl。JavaScript:Node.js Webservice拒绝对SOAP请求节点.js的访问,node.js,soap,Node.js,Soap,我试图在不使用节点中的任何库的情况下从web服务获取SOAP响应,但我的代码却一无所获。可以找到服务的WSDL。我在SoapUI中测试了该请求,并在批处理文件中使用了curl。JavaScript: const http = require('http') const fs = require('fs') const xml = fs.readFileSync('latlonzipcode.xml','utf-8') const options = { hostname : 'gra
const http = require('http')
const fs = require('fs')
const xml = fs.readFileSync('latlonzipcode.xml','utf-8')
const options = {
hostname : 'graphical.weather.gov',
path : '/xml/SOAP_server/ndfdXMLserver.php',
method : 'POST',
headers : {
'Content-Type' : 'text/xml;charset=utf-8',
'soapAction' : 'https://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl#LatLonListZipCode'
}
}
var obj = http.request(options,(resp)=>{
let data = ''
console.log(resp.statusCode)
console.log(resp.headers)
resp.on('data',(chunk)=>{
data += chunk
})
resp.on('end',()=>{
console.log(data)
})
}).on('error',(err)=>{
console.log("Error: " + err.message)
})
obj.write(xml)
obj.end()
SOAP信封/XML文件:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ndf="https://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl">
<soapenv:Header/>
<soapenv:Body>
<ndf:LatLonListZipCode soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<zipCodeList xsi:type="xsd:string">90210</zipCodeList>
</ndf:LatLonListZipCode>
</soapenv:Body>
</soapenv:Envelope>
我从服务收到的响应:
403
{ server: 'AkamaiGHost',
'mime-version': '1.0',
'content-type': 'text/html',
'content-length': '320',
expires: 'Wed, 18 Jul 2018 14:18:05 GMT',
date: 'Wed, 18 Jul 2018 14:18:05 GMT',
connection: 'close' }
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>
You don't have permission to access "http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php" on this server.<P>
Reference #18.7fd23017.1531923485.f45e7526
</BODY>
</HTML>
403
{服务器:'AkamaiGHost',
“mime版本”:“1.0”,
“内容类型”:“文本/html”,
“内容长度”:“320”,
到期日期:“2018年7月18日星期三14:18:05 GMT”,
日期:“2018年7月18日星期三14:18:05 GMT”,
连接:“关闭”}
拒绝访问
拒绝访问
您无权访问此服务器上的“http:;/;/;图形.;天气.;政府/;xml&/;SOAP_;服务器/;ndfdXMLserver.;php”。
参考文献 #18.7fd23017和#46;1531923485.f45e7526
批处理文件工作正常。任何帮助都会很好。谢谢
更新
在谷歌上搜索后,我找到了。因此,我在我的选项中添加了标题User-Agent:headerTest
。。。最后得到了回应,不幸的是
WSDL。正如我在上面的更新中所述,我最初的问题是由于没有使用
https
,并且web服务在没有用户代理的情况下阻止请求。至于作为响应返回的WSDL文件,我在选项中错误地使用了GET
,忘记了更正它。最后,我怀疑在将XML写入主体时发生了什么,并发现了一个问题——我找到了答案。以下是更正后的代码:
const https = require('https')
const fs = require('fs')
const xml = fs.readFileSync('latlonzipcode.xml','utf-8')
const options = {
hostname : 'graphical.weather.gov',
port : 443,
path : '/xml/SOAP_server/ndfdXMLserver.php',
method : 'POST',
headers : {
'User-Agent' : 'sampleTest',
'Content-Type' : 'text/xml;charset=utf-8',
'soapAction' : 'https://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl#LatLonListZipCode'
}
}
var obj = https.request(options,(resp)=>{
let data = ''
fs.writeFile('server.log',resp.statusCode+"\n"+JSON.stringify(resp.headers),(err)=>{
err ? console.log(err) : console.log('log file written')
})
resp.on('data',(chunk)=>{
data += chunk
})
resp.on('end',()=>{
fs.writeFile('soap-response.xml',data,(err)=>{
err ? console.log(err) : console.log('data file written')
})
console.log(data)
})
}).on('error',(err)=>{
console.log("Error: " + err.message)
})
/**
* '.write()' is not being used:
* obj.write(xml) ? console.log('op success') : console.log('error!')
* obj.end()
*/
obj.end(xml) ? console.log('op success') : console.log('error!')
Node.js终于让我对JavaScript感到兴奋。谢谢
const https = require('https')
const fs = require('fs')
const xml = fs.readFileSync('latlonzipcode.xml','utf-8')
const options = {
hostname : 'graphical.weather.gov',
port : 443,
path : '/xml/SOAP_server/ndfdXMLserver.php',
method : 'POST',
headers : {
'User-Agent' : 'sampleTest',
'Content-Type' : 'text/xml;charset=utf-8',
'soapAction' : 'https://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl#LatLonListZipCode'
}
}
var obj = https.request(options,(resp)=>{
let data = ''
fs.writeFile('server.log',resp.statusCode+"\n"+JSON.stringify(resp.headers),(err)=>{
err ? console.log(err) : console.log('log file written')
})
resp.on('data',(chunk)=>{
data += chunk
})
resp.on('end',()=>{
fs.writeFile('soap-response.xml',data,(err)=>{
err ? console.log(err) : console.log('data file written')
})
console.log(data)
})
}).on('error',(err)=>{
console.log("Error: " + err.message)
})
/**
* '.write()' is not being used:
* obj.write(xml) ? console.log('op success') : console.log('error!')
* obj.end()
*/
obj.end(xml) ? console.log('op success') : console.log('error!')