2017-07-28 47 views
0

我需要連接到一個自定義XML服務,它具有以下要求:的NodeJS:如何使同一個連接上連續的http請求

第一個HTTP請求到服務必須到登錄端點進行,與標題字段「名稱」包含我們想要連接的用戶。作爲響應,我們得到一個「摘要」標題字段,其中包含一個挑戰,我們必須使用這個挑戰來計算要用以下請求發送的值。

以下請求必須在同一連接上進行,並根據響應發送包含先前計算值的「摘要」標題。

如果我們沒有這樣做,服務器將以錯誤結束連接。

我試過使用keepAlive = true和maxSockets = 1的http代理,但是我無法從第二個請求獲取響應。 (如果我禁用代理我得到的迴應,但因爲它是從不同的方面所作的請求從服務器端

感謝所有幫助...這裏是我的代碼:

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

您是否嘗試添加'res1.resume()'以排除來自第一個請求的響應? – mscdex

+0

謝謝@mscdex,確實解決了我的問題。 – user3450162

回答

0

添加res1.resume();將允許排除/丟棄第一個請求的響應,以便第二個請求可以在同一個套接字上進行。