2017-07-28 4 views
0

I auf eine benutzerdefinierte XML-Dienst verbinden müssen machen, die folgende Anforderungen haben:NodeJS: Wie aufeinanderfolgende HTTP-Anfragen auf derselben Verbindung

Die erste HTTP-Anforderung an den Dienst muss zum Anmeldung Endpunkt gemacht werden, mit dem Header-Feld "Name" enthält den Benutzer, den wir verbinden möchten. Als Antwort erhalten wir ein "Digest" Header-Feld, das eine Abfrage enthält, die wir verwenden müssen, um einen Wert zu berechnen, der mit den folgenden Anforderungen gesendet werden soll.

Die folgenden Anforderungen müssen auf der gleichen Verbindung und Senden einer "Digest" -Kopfzeile mit dem zuvor berechneten Wert basierend auf der Antwort erfolgen.

Wenn dies fehlschlägt, beendet der Server die Verbindung mit einem Fehler.

Ich habe versucht, einen http-Agent mit KeepAlive = True und MaxSockets = 1, aber ich kann keine Antwort von der zweiten Anfrage erhalten. (Wenn ich die Agenten deaktivieren erhalte ich eine Antwort, aber die Anforderung wird von dem Server beendet, weil es aus einer anderen Verbindung hergestellt ist

jede Hilfe dankbar ... hier ist mein Code:.

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

Haben Sie versucht, eine 'res1.resume()' hinzufügen, um die Antwort von der ersten Anfrage zu entleeren ? – mscdex

+0

Dank @mscdex, das mein Problem gelöst hat. – user3450162

Antwort

0

eines Hinzufügen res1.resume(); ermöglicht es, die Antwort für die erste Anfrage zu löschen/verworfen, so dass die zweite Anfrage auf dem gleichen Socket erfolgen kann

Verwandte Themen