7

wsdlサービスを利用しようとして、node-soapを見つけましたが、いくつかのヘッダーを設定する方法が見つかりません。

例 :

header = {
  "Username": "foo",
  "Password" : "bar"
}

これが必要な理由は、消費しようとしているwsdlがヘッダーを介してユーザー名とパスワードを必要とするためです。

前もって感謝します

4

6 に答える 6

11

今は役に立たないかもしれませんが、まだ開いているこの質問に答えるために、ここに行きます.

メソッド Client.addSoapHeader を利用できます。ドキュメントによると

Client.addSoapHeader(soapHeader[, name, namespace, xmlns]) - soapHeader を soap:Header ノードに追加します

オプション

soapHeader Object({rootName: {name: "value"}}) または strict xml-string 最初の引数が object の場合のオプションのパラメーター:

name 不明なパラメーター (空の文字列の可能性があります)

xml 名前空間の名前空間プレフィックス

xmlns URI

したがって、オブジェクトを作成し、それを次のようにこのメソッドに渡す必要があります。

var soapHeader = {
  "Username": "foo",
  "Password" : "bar"
};
client.addSoapHeader(soapHeader);
于 2014-07-24T08:39:23.650 に答える
1

node-soapの README を読んで、あなたがやろうとしていることがそうでない場合WS-Security(私はSOAP から遠く離れているのでわかりません)、作者に問題を報告する必要があります。ドキュメントに従ってカスタム ヘッダーを設定する方法はありません。

そうである場合は 、README のこの部分のWS-Security指示に従ってください。

于 2012-05-18T21:08:19.057 に答える
0

これは私にとってはうまくいきました。create client メソッドでは、wsdl 定義を取得するために wsdl_header が必要です。作成したら、基本認証セキュリティを設定する必要があります。

var url = 'your WSDL url';
var auth = "Basic " + new Buffer("username" + ":" + "password").toString("base64");

soap.createClient( url,{ wsdl_headers: {Authorization: auth} }).then(
    function(client){
        client.setSecurity(new soap.BasicAuthSecurity('rflhconfort_ws', '6syqxje9'));
        client.your_Method(args); 
    }
于 2016-06-22T22:16:42.793 に答える
0
soap = require('soap')
parseString = require('xml2js').parseString

soap.createClient('https://api.bingads.microsoft.com/Api/Advertiser/AdIntelligence/v9/AdIntelligenceService.svc?wsdl', function(err, client) {
  var soapHeader = {
    'AuthenticationToken': process.argv[2],
    'DeveloperToken': process.argv[3],
    'CustomerId': process.argv[4],
    'CustomerAccountId': process.argv[5]
  };
  client.addSoapHeader(soapHeader);
  client.SuggestKeywordsFromExistingKeywords({Keywords: ["Hello world"]}, function(err, result) {
    console.log(result.body);
  });
});

これはうまくいきません。応答は無効なログイン資格情報です。同じ資格情報が SOAPUI で正常に機能します。したがって、他の回答に記載されているログイン資格情報の送信形式は間違っている必要があります。

于 2015-03-11T13:00:47.967 に答える
0

私は同じ問題を抱えていましたが、以下で解決しました

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:yourUrn">
<soapenv:Header>
  <urn:AuthenticationMethod>
     <urn:userName>username</urn:userName>
     <urn:password>password</urn:password>
   </urn:AuthenticationMethod>
    </soapenv:Header>
    <soapenv:Body>
    <urn:SoapFunctionToCall>
     <urn:Field1>Text</urn:Field1>
      <urn:Field2>Text</urn:Field2>
       <urn:Field3>Text</urn:Field3>
        <urn:Field14>Text</urn:Field4>
         <urn:Field5>Text</urn:Field5>
         <urn:Field6>Text</urn:Field6>
      </urn:SoapFunctionToCall>
     </soapenv:Body>
    </soapenv:Envelope>

以下は、ノードで呼び出したメソッドです

function createSoapEntry(){
let url = "your wsdl url"
var credentials = {
    AuthenticationMethod:{
        userName: "username",
        password: "password"
    }  
}
let args = { 
            Field1:"Text",
            Field2:"Text",
            Field3:"Text",
            Field4:"Text",
            Field5:"Text",
            Field6:"Text"            
    }
soap.createClient(url, function (err, client){
    client.addSoapHeader(credentials)

    client.SoapFunctionToCall(args, function (err, res) {
        if (err) {
            console.log("Error is ----->" + err)
        } else {
            console.log("Response is -----> " + res)
        }
    })
})

 }
于 2018-07-04T15:48:12.257 に答える