我正在尝试使用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);
我知道这很模糊,我只能这样做:
这是在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>
欢迎任何帮助,我碰到了墙......
答案 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/",
}