web-dev-qa-db-fra.com

comment envoyer une requête Post de node.js à un autre serveur (Java)?

Je dois envoyer des données (objet Json) à un autre serveur Web (Java).

Ceci est mon code node.js

var express = require('express');

var app = express();

app.get('/', function (req, res) {
    var data = querystring.stringify({
        username: "myname",
        password: " pass"
    });

    var options = {
        Host: 'www.javaserver.com',
        port: 8070,
        path: '/login',
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': Buffer.byteLength(data)
        }
    };

    var req = http.request(options, function (res) {
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
            console.log("body: " + chunk);
        });
    });
    req.write(data);
    req.end();

});

app.listen(8090);

Ceci ne fonctionne pas. Comment puis-je faire ceci?

9
silvesterprabu

Vous répétez les variables req et res pour la demande de publication. J'ai mis à jour votre code et l'ai testé en travaillant avec requestb.in

var express = require('express');
var querystring = require('querystring');
var http = require('http');

var app = express();
app.get('/', function (req, res) {
  var data = querystring.stringify({
    username: "myname",
    password: " pass"
  });

  var options = {
    Host: 'requestb.in',
    port: 80,
    path: '/nfue7rnf',
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Content-Length': Buffer.byteLength(data)
    }
  };

  var httpreq = http.request(options, function (response) {
    response.setEncoding('utf8');
    response.on('data', function (chunk) {
      console.log("body: " + chunk);
    });
    response.on('end', function() {
      res.send('ok');
    })
  });
  httpreq.write(data);
  httpreq.end();
});

app.listen(8090);

Veuillez mettre à jour l'hôte de la demande et le chemin dans le code avec les valeurs dont vous avez besoin. Faites-moi savoir si cela ne fonctionne toujours pas pour vous.

14
vmx

Veuillez énumérer l'erreur exacte, "cela ne fonctionne pas ..." n'est pas très utile pour identifier le problème. Le code est en outre très bien avec des problèmes mineurs.

var http = require("http");
var querystring = require("querystring");
var express=require('express');
var app=express();
app.get('/',function(req, res) {
    var data = querystring.stringify({
        username: "myname",
        password: " pass"
    });

    var options = {
        Host: 'www.javaserver.com',
        port: 8070,
        path: '/login',
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': Buffer.byteLength(data)
        }
    };

    var req = http.request(options, function(res)
    {
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
            console.log("body: " + chunk);
        });
    });
    req.write(data);
    req.end();
});
app.listen(8090);

La seule chose qui compte, c’est qu’il devrait y avoir un serveur sur www.javaserver.com:8070 pour donner une réponse pour/login pour les données soumises au POST dans ce cas, les informations d’identification de connexion.

2
Nitin...

J'ai implémenté la même chose, mais j'obtiens l'erreur "connect ECONNREFUSED 127.0.0.1:80". Erreur. ': Socket raccroche À createHangUpError (_http_client.js: 331: 15) à Socket.socketOnEnd (_http_client.js: 423: 23) à emitNone (events.js: 111: 20) à Socket.emit (events.js: 208: 7) à endReadableNT (_stream_readable.js: 1064: 12) à _combinedTickCallback (internal/process/next_tick.js: 138: 11) à process._tickDomainCallback (internal/process/next_tick.js: 218: 9) `

Si vous avez des idées, je ne comprends pas pourquoi il affiche "127.0.0.1" alors que je fais une demande à une adresse IP externe.

0