NodeJs:如何在同一连接上发出连续的http请求

时间:2017-07-28 16:11:30

标签: node.js httprequest

我需要连接到具有以下要求的自定义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();

});

1 个答案:

答案 0 :(得分:0)

添加res1.resume();将允许第一个请求的响应被消耗/丢弃,以便第二个请求可以在同一个套接字上进行。