到目前为止我还没用过肥皂。我正在使用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
,这意味着错误发生,因为它没有识别会话(我想)。
答案 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 });