我正在尝试不使用Node中的任何库从Web服务 获得SOAP响应,但是我所拥有的代码无济于事。可以在here中找到该服务的WSDL。我已经在SoapUI中测试了请求,并且在批处理文件中使用curl进行了测试。 JavaScript:
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>
和.bat文件-用于测试:
:: curl options: -H is for Header --data allows file parameters
curl -H "soapAction: \"https://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl#LatLonListCityNames\"" -H "Content-Type: text/xml;charset=UTF-8" --data @latlonzipcode.xml https://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php > response.xml
我从服务中收到的回复:
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>
批处理文件运行完美。任何帮助都会很棒。谢谢。
更新
在Google搜索之后,我发现了this。所以我将标头User-Agent : headerTest
添加到了我的选项中...最终得到了响应,不幸的是
WSDL。
答案 0 :(得分:0)
如我在上面的更新中所述,我的原始问题是由于未使用https
造成的,并且Web服务正在阻止没有{{1 }}标头。至于作为响应返回的WSDL文件,我在选项中错误地使用了User-Agent
,却忘记了对其进行更正。最终,我怀疑将XML写入主体时发生了什么问题,发现存在问题-我找到了答案here。这是更正的代码:
GET
Node.js终于使我对JavaScript感到兴奋。谢谢。