Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Webservice拒绝对SOAP请求节点.js的访问_Node.js_Soap - Fatal编程技术网

Node.js Webservice拒绝对SOAP请求节点.js的访问

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

我试图在不使用节点中的任何库的情况下从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 : '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&#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>
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!')