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();
});
Haben Sie versucht, eine 'res1.resume()' hinzufügen, um die Antwort von der ersten Anfrage zu entleeren ? – mscdex
Dank @mscdex, das mein Problem gelöst hat. – user3450162