web-dev-qa-db-fra.com

Spécifiez le numéro de port dans la requête HTTP (node.js)

Est-il possible de spécifier un numéro de port lors d'une requête HTTP à l'aide du module de requête? Je ne vois rien à ce sujet dans la documentation:

var request = require('request');

// this works
request({
  method: 'GET',
  url: 'http://example.com'
}, function(error, response, body) {
  if (error) console.log(error);
  console.log(body);
});

// this does not work
request({
  method: 'GET',
  url: 'http://example.com:10080'
}, function(error, response, body) {
  // ...
});

De plus, quand je lance la deuxième version, absolument rien ne se passe dans mon programme (presque comme si la demande n'avait jamais été faite).

Je sais également que je peux spécifier un numéro de port lors d'une requête utilisant le module http. Pourquoi n'est-ce pas une option dans le module de requête?

EDIT: J'aurais dû le mentionner auparavant, mais je suis en train d'exécuter cette application sur Heroku.

Lorsque j'exécute la demande localement (à l'aide du module de demande), je peux spécifier le numéro de port et obtenir un rappel réussi. 

Lorsque j'exécute la demande de Heroku, aucun rappel n'est déclenché et nginx n'affiche aucun enregistrement de la demande.

Suis-je fou? Y a-t-il une raison pour laquelle Heroku m'empêche de faire une requête HTTP sortante à un numéro de port spécifique? 

7
djfdev

Utiliser request avec l'URL complète comme premier argument me convient:

var http = require('http');
var request = require('request');

// start a test server on some non-standard port
var server = http.createServer(function (req, res) {
  res.end('Hello world');
});
server.listen(1234);

// make the GET request
request('http://127.0.0.1:1234', function (err, res) {
  if (err) return console.error(err.message);

  console.log(res.body);
  // Hello world

  server.close();
});

Spécifier séparément la method et la url fonctionne également:

request({
  method: 'GET',
  url: 'http://127.0.0.1:1234'
}, function (err, res) {
  if (err) return console.error(err.message);

  console.log(res.body);
  // Hello world

  server.close();
});

Vous voudrez peut-être vérifier que votre serveur est en cours d'exécution et que vous n'êtes pas derrière un proxy ou un pare-feu qui empêche l'accès sur ce port.

6
Robin Murphy

Je sais que la question demande le module de requête, mais dans un contexte plus général, si vous utilisez le module http, vous pouvez utiliser la clé port/ docs .

par exemple.

http.get({
    Host: 'example.com', 
    path: '/some/path/',
    port: 8080
}, function(resp){
    resp.on('data', function(d){
        console.log('data: ' + d)
    })
    resp.on('end', function(){
        console.log('** done **')
    })
}).on('error', function(err){
    console.log('error ' + err)
})
0
Mauro Moreno