Web服务拒绝对SOAP请求Node.js的访问

时间:2018-07-18 16:12:32

标签: node.js soap

我正在尝试不使用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&#58;&#47;&#47;graphical&#46;weather&#46;gov&#47;xml&#47;SOAP&#95;server&#47;ndfdXMLserver&#46;php" on this server.<P>
Reference&#32;&#35;18&#46;7fd23017&#46;1531923485&#46;f45e7526
</BODY>
</HTML>

批处理文件运行完美。任何帮助都会很棒。谢谢。

更新

在Google搜索之后,我发现了this。所以我将标头User-Agent : headerTest添加到了我的选项中...最终得到了响应,不幸的是 WSDL。

1 个答案:

答案 0 :(得分:0)

如我在上面的更新中所述,我的原始问题是由于使用https 造成的,并且Web服务正在阻止没有{{1 }}标头。至于作为响应返回的WSDL文件,我在选项中错误地使用了User-Agent,却忘记了对其进行更正。最终,我怀疑将XML写入主体时发生了什么问题,发现存在问题-我找到了答案here。这是更正的代码:

GET

Node.js终于使我对JavaScript感到兴奋。谢谢。