使用https nodejs模块的SOAP请求

时间:2013-09-18 16:10:58

标签: node.js soap https

我正在尝试使用SAFT规范访问政府服务以传达交通指南,但我一直收到500,内部错误。

我已经验证了我正在发送的XML,并且我已经尝试过在论坛中找到的不同的XML,其中一些是正确的,而另一些则是给出了更具体的错误,但由于某种原因我一直得到500,内部错误。 因此,我使用nodejs的https模块调用服务时出错了。我是这样做的:

request.log.setActionStart(request.requestID, "FINPT-WEBSERVICE", "webservice");
var options = {
    hostname: "servicos.portaldasfinancas.gov.pt",
    port: 701,
    path: "/sgdtws/documentosTransporte",
    method: "POST",
    pfx: fs.readFileSync('keys/TesteWebService.pfx'),
    cert: fs.readFileSync('keys/ChavePublicaAT.cer'),
    passphrase: "TESTEwebservice",
    agent: false,
    rejectUnauthorized: false,
    secureProtocol: 'SSLv3_method',
    headers: {
        "Content-Type": "text/xml;charset=UTF-8",
        "SOAPAction": "https://servicos.portaldasfinancas.gov.pt:701/sgdtws/documentosTransporte/",
    }
};
//options.agent = new https.Agent(options);
var reqFinWebs = https.request(options, function(resFinWebs) {
    console.log(resFinWebs.statusCode);
    if(resFinWebs.statusCode==200){
          //....
    });
    reqFinWebs.end(soapXML);
    console.log(soapXML);

我知道这很模糊,我只能这样做:

http://info.portaldasfinancas.gov.pt/NR/rdonlyres/3B4FECDB-2380-45D7-9019-ABCA80A7E99E/0/Comunicacao_Dados_Documentos_Transporte.pdf

这是在PT和编程葡萄牙语社区的内容是什么,我找不到任何人在nodejs中开发这个。

此外,它不是证书或公钥,这是一个特定的错误,我移动了它。

有没有人有任何内部或类似的情况?有什么建议吗?

错误:

500
500 '<?xml version=\'1.0\' ?>\n<env:Envelope xmlns:env=\'http://schemas.xmlsoap.org/soap/envelope/\'>\n<env:Body>\n<env:Fault>\n<faultcode>env:Client</faultcode>\n<faultstring>InternalError</faultstring>\n</env:Fault>\n</env:Body>\n</env:Envelope>\n'
<?xml version='1.0' ?>
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
<env:Body>
<env:Fault>
<faultcode>env:Client</faultcode>
<faultstring>Internal Error</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>

欢迎任何帮助,我碰到了墙......

1 个答案:

答案 0 :(得分:7)

解决了,必须指定标题Content-length:

headers: {
    "Accept": "text/xml",
    "Content-length": soapXML.length,
    "Content-Type": "text/xml;charset=UTF-8",
    "SOAPAction": "https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/",
}