Использование узла для вызова веб-службы SOAP через https
Я пытаюсь использовать узел-мыло https://github.com/vpulim/node-soap для вызова веб-службы, но у меня возникают проблемы при использовании модуля с https.
В приведенном ниже коде я использую http, и я могу видеть функции и войти describe()
из About
функция. (Ответы пустые, вероятно, потому что WS настроен так, когда используется http(?))
var soap = require('soap');
var url = "http://XXXXX/service.svc?DocArchiveService/DocArchiveV201409";
var auth = "Basic " + new Buffer("USERXXX" + ":" + "PWYYY").toString("base64");
var args = {};
soap.createClient(url, { wsdl_headers: {Authorization: auth} }, function(err, client) {
console.log(client.describe().DocArchiveV201409.DocArchiveV201409Soap.About);
client.DocArchiveV201409.DocArchiveV201409Soap.About(args, function(err, result){
if (err) throw err;
console.log(result);
});
});
Выход:
{ input: {}, output: { AboutResult: 's:string' } }
Сообщение об ошибке (это нормально, поскольку ответ все равно будет пустым):
Ошибка: невозможно выполнить анализ ответа при завершении (E:\Qlikview\SourceDocuments\UnderDevelopment\Node\node_modules\so ap\lib\client.js:383:19)
Моя проблема в том, что при использовании https я получаю неопределенного клиента.
E: \ Qlikview \ SourceDocuments \ UnderDevelopment \ Node \ Soap.js: 23 console.log (клиент); ^ ReferenceError: клиент не определен в Object.anonymous (E:\Qlikview\SourceDocuments\UnderDevelopment\Node\Soa p.js:23:13)
Кто-нибудь использовал нод-мыло с https?
редактировать: как результат ниже предлагает мне сначала иметь сертификат. Я пытался использовать SoapUI без сертификата, и это прекрасно работает. Может быть, есть некоторые параметры для createClient
Я могу использовать в нод-мыло?
console.log (err) возвращает:
{ Error: unable to get local issuer certificate
at Error (native)
at TLSSocket.<anonymous> (_tls_wrap.js:1079:38)
at emitNone (events.js:86:13)
at TLSSocket.emit (events.js:185:7)
at TLSSocket._finishInit (_tls_wrap.js:603:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:433:38) code: 'UNABLE_TO_GET_IS
SUER_CERT_LOCALLY' }
1 ответ
Как очищено от tls
конкретная ошибка, вы не можете создать мыльный клиент, вызвав soap.createClient
, Возвращается err
а также undefined
клиент, поэтому последующие звонки не удается.
Основная причина позади certificate
проблема может быть либо сертификаты мыльного сервера подписаны internal CA
или мыльный сервер использует self-signed certificate
,
Возможные решения, которые могут быть использованы для решения этой проблемы:
[Не рекомендуется] Игнорировать предупреждения, относящиеся к сертификату, отключив
SSL
проверить по запросу время. напримерvar request = require('request'); var specialRequest = request.defaults({ strictSSL: false );
[Рекомендуется] Укажите корневые / промежуточные сертификаты CA для проверки удаленных сертификатов.
var request = require('request'); var specialRequest = request.defaults({ agentOptions: { ca: fs.readFileSync('ca.cert.pem') //path of CA cert file } );
Для обоих решений передайте это specialRequest
в createClient
,
soap.createClient(url, {
wsdl_headers: {Authorization: auth},
request : specialRequest
}, function(err, client) {
//your code
});
Я просто просмотрел документацию и нашел решение. Это может или не может работать, но стоит попробовать логически. Я не мог протестировать вышеупомянутые решения, но это должно работать.
Надеюсь, это поможет вам.
Для рекомендуемого решения - предоставьте корневые / промежуточные сертификаты CA для проверки удаленных сертификатов, попробуйте следующее:
var request = require('request');
var specialRequest = request.defaults({ ca: fs.readFileSync('ca.cert.pem') //path of CA cert file );
var auth = "Basic " + new Buffer.from("myUsername:myPassword").toString("base64");
var options = { wsdl_headers: { Authorization: auth }, request: specialRequest };
soap.createClient(url, options, function (err, client) {
client.myFunction(args, function (err, result) {
console.log(result);
});
});