我需要连接到具有以下要求的自定义XML服务:
必须向登录端点发出对服务的第一个http请求,标题字段"名称" 包含我们想要的用户连接。作为回应,我们会收到" Digest" 标头字段,其中包含我们必须用来计算要使用以下请求发送的值的质询。
以下请求必须在相同的连接上发送并发送"摘要"包含基于响应的先前计算值的标题。
如果我们不这样做,服务器会以错误结束连接。
我尝试过使用http代理并使用keepAlive = true和maxSockets = 1,但我无法从第二个请求获得响应。 (如果我禁用了代理,我会得到一个响应,但请求是从服务器结束的,因为它是由不同的连接构成的。
感谢任何帮助......这是我的代码:
var http = require('http');
const keepAliveAgent = new http.Agent({ keepAlive: true, maxSockets: 1 });
var docxml = "<?xml version='1.0' encoding='windows-1252'?><document><docitems></docitems></document>";
var loginHash = function(user, password, digest) {
result= digest+password+user;
return result.toString();
}
var loginOptions = {
host: '10.190.22.1',
port: 2261,
path: '/Login',
agent: keepAliveAgent,
headers: {
'name': 'JOSE'
}
};
req1 = http.get(loginOptions, function(res1) {
procDigest = loginHash('JOSE', 'ROCHA', req1.res.headers.digest);
console.log('Digested: ' + procDigest);
var insertOptions = {
host: '10.190.22.1',
port: 2261,
path: '/PostSomething',
method: 'POST',
agent: keepAliveAgent,
headers: {
'Digest': procDigest
}
};
var req2 = http.request(insertOptions, function (res2) {
console.log('Request2 Headers: ' + JSON.stringify(req2.res.statusCode));
});
req2.on('end', function (){
console.log('Request2 Headers: ' + req2.res);
});
req2.on('error', function(e) {
console.log('Error: ' + e);
});
req2.write(docxml);
req2.end();
});
答案 0 :(得分:0)
添加res1.resume();
将允许第一个请求的响应被消耗/丢弃,以便第二个请求可以在同一个套接字上进行。