2016-12-23 2 views
2

Я пытаюсь использовать node-soap https://github.com/vpulim/node-soap для вызова веб-службы, но у меня возникают проблемы с использованием модуля с https.Использование узла для вызова веб-службы 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' } } 

Сообщение об ошибке (это нормально, так как ответ будет пусто в любом случае) :

Error: Cannot parse response at finish (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(client); ^ReferenceError: client is not defined at 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' } 
+0

Попробуйте напечатать 'err' в случае' https'. 'console.log (err)' –

+0

@MukeshSharma Возвращает: {Ошибка: не удалось получить сертификат локального эмитента при ошибке (native) в TLSSocket. (_tls_wrap.js: 1079: 38) в emitNone (events.js: 86: 13) на TLSSocket.emit (events.js: 185: 7) на TLSSocket._finishInit (_tls_wrap.js: 603: 8) на TLSWrap.ssl.onhandshakedone (_tls_wrap.js: 433: 38) код: 'UNABLE_TO_GET_IS SUER_CERT_LOCALLY'} – mickeger

ответ

1

Как очищается от tls конкретной ошибки, вы не можете создавать мыло клиента путем вызова soap.createClient. Он возвращает err и undefined клиент, поэтому последующие вызовы терпят неудачу.

Основная причина позади certificate Проблема может быть либо сертификатом мыльного сервера подписана internal CA, либо мыльный сервер использует self-signed certificate.

Возможные решения, которые могут быть использованы для решения проблемы являются

  1. [Не рекомендуется] Игнорировать сертификат конкретные предупреждения, отключив SSL проверку во время запроса. , например.

    var request = require('request'); 
    var specialRequest = request.defaults({ 
        strictSSL: false 
    ); 
    
  2. [Рекомендуется] Обеспечить корневые/промежуточные сертификаты 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 
    }); 

Я просто просмотрел документацию и придумал решение. Он может работать или не работать, но стоит попробовать логически. Я не мог проверить вышеупомянутые решения, но он должен работать.

Надеюсь, это поможет вам.

+0

Спасибо! Я попробовал ваше не рекомендованное решение, и это работает. Я рассмотрю предоставление сертификатов. – mickeger

Смежные вопросы