7
votes

Comment définir des en-têtes à l'aide du savon de nœud dans Node.js

J'essaie de consommer un service WSDL et j'ai trouvé du savon nœud, mais je ne trouve pas comment définir certains en-têtes.

Exemple: P>

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


2 commentaires

Pas un commentaire utile, mais l'un de nos principaux ingénieurs PHP avait l'habitude de dire «l'intégration WSDL est une folie» ...


J'ai la configuration du savon de nœud mais maintenant je dispose d'autres problèmes au sein de AddChild


6 Réponses :


1
votes

lire via le README pour nœud-savon , si ce que vous essayez de faire est pas ws-sécurité (je n'ai aucune idée parce que je reste loin loin du savon), alors vous allez devoir déposer un problème avec l'auteur, car je vois aucun moyen de définir des en-têtes personnalisés en fonction de la documentation.

Si cela est ws-sécurité , suivez les instructions sur cette partie du réveil .


2 commentaires

David, il semble que vous ayez raison, je l'ai personnalisé et le poussera bientôt. Mais je voudrais dire que nœud.js ne joue pas bien avec le savon du tout.


Je dirais que c'est probablement parce que le savon est une nightmare standard supporté de tout ce qui est faux et mal dans le développement "Enterprise".



11
votes

Cela peut ne pas être utile maintenant toutefois à répondre à cette question qui est toujours ouverte, c'est ici.

Vous pouvez utiliser la méthode client.Addsoapher. Selon la documentation

Client.AddSoAPHeader (SOAPHER [ NAME, Espace de noms, XMLNS]) - Ajouter Soaphers à savon: noeud d'en-tête

Options

Objet SOAPHEREDER ({RootName: {nom: "valeur"}}) ou strict xml-string Paramètres facultatifs lorsque la première Arg est un objet:

Nom Paramètre inconnu (il ne peut qu'une seule chaîne vide)

Préfixe d'espace de noms de l'espace de noms XML

xmlns uri

Vous devez donc créer un objet et transmettre cela à cette méthode comme: xxx


1 commentaires

AddSoapheader Création de nouvelles balises dans l'en-tête, mais je souhaite créer un en-tête différent ("env: l'en-tête", pas "Savon: en-tête"). Une idée de comment faire ça?



0
votes
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);
  });
});
This won't work. The reply is invalid login credentials. The same credentials work fine with SOAPUI. So, the format of sending the login credentials mentioned in the other answers must be wrong.

1 commentaires

Vous devez ajouter le 'TNS: authentificationToken': préfixe pour chaque valeur dans les en-têtes SOAP



0
votes

Cela a fonctionné pour moi. La méthode Create Client a besoin de la WSDL_HEPER pour récupérer la définition WSDL. Une fois que cela est créé, vous devez définir la sécurité d'autorisation de base. xxx


0 commentaires

0
votes

J'ai eu le même problème et je l'ai résolu dans le cas ci-dessous est ce qui a fonctionné pour moi Mon WSDL avec lequel j'ai inséré des données à l'aide du client SoaPUI (pour voir quels sont les champs requis) xxx

ci-dessous est la méthode que j'ai appelée nœud xxx


0 commentaires

1
votes

Selon avec le Documentation , pour les en-têtes HTTP agrégés, vous Peut mettre des en-têtes, exemple de code: xxx


1 commentaires

Merci Yuruuuuu - Je veux dire, je me sens comme ça défait tout le but d'utiliser du savon, mais ma configuration de ses clients n'est pas parfaite - Whos est? Cela ressemble à un mélange de quelques piles de technologies différentes ... mais hey man, flux de données.