使用node-soap

时间:2018-03-02 15:58:25

标签: node.js http soap node-soap

到目前为止我还没用过肥皂。我正在使用node-soap库(https://github.com/vpulim/node-soap)。

我想与soap服务器通信。为了维护会话,服务器向我发送set-cookie响应头:'ASP.NET_SessionID=55....hrc; path/; HttpOnly'和Login方法响应。我想在Logout方法请求中发回这个cookie。

我尝试: client.addHttpHeader(' Cookie',' ASP.NET_SessionID = 55 .... hrc');

但随后:

client.LogoutAsync({})
    .then(result => {console.log(result);})
    .catch(error => {console.log(error);});

我收到错误:

events.js:183 throw er; //Unhandled 'error' event

这里发生了什么,以及如何发回Cookie标头?

P.S。没有cookie它按预期工作返回我Logout: false,这意味着错误发生,因为它没有识别会话(我想)。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,发现可以通过标头完成此操作:

soap.createClientAsync(this.url, this.options).then(client => {
  client.addHttpHeader('Cookie', 'ASP.NET_SessionId=' + this.sessionId)
  client.GetIdentity((err, results) => {
    if (err) reject(err)
    resolve(results)
  })
})

答案 1 :(得分:0)

我们刚刚遇到了同样的问题,并找到了一个简单的解决方案。

request 库使用的 soap 库支持 cookie jar 的概念。

您可以通过向所有请求添加 jar 选项来启用它。例如:

client.LoginAsync({}, { jar: true });
client.LogoutAsync({}, { jar: true });

这会全局存储 cookie。

如果您想在本地存储 cookie(例如,每个会话),您可以使用自定义 cookie jar 对象,该对象将仅用于特定范围,例如:

const request = require('request');

const myJar = request.jar();
client.LoginAsync({}, { jar: myJar });
client.LogoutAsync({}, { jar: myJar });