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?
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.
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)
})