web-dev-qa-db-fra.com

Qu'est-ce qui pourrait provoquer une erreur de «connexion ETIMEDOUT» lorsque l'URL fonctionne dans le navigateur?

Je m'entraîne avec NodeJS et ai essayé un simple appel GET. Voici mon code:

var http = require('http');

var options = {
    Host: 'www.boardgamegeek.com',
    path: '/xmlapi/boardgame/1?stats=1',
    method: 'GET'
}

var request = http.request(options, function (response) {
    var str = ""
    response.on('data', function (data) {
        str += data;
    });
    response.on('end', function () {
        console.log(str);
    });
});

request.on('error', function (e) {
    console.log('Problem with request: ' + e.message);
});

request.end();

L'URL appelée semble fonctionner dans mon navigateur https://www.boardgamegeek.com/xmlapi/boardgame/1?stats=1

Quoi qu'il en soit, j'ai Problème avec la demande: connectez ETIMEDOUT lorsque j'exécute le code et je n'ai aucune idée de comment le corriger.

Qu'est-ce qui pourrait provoquer cette erreur? Est-ce mon code ou est-ce un problème de réseau/proxy?

10
Alex

Lorsque vous êtes derrière un proxy, vous devez apporter les modifications suivantes (comme expliqué dans cette réponse ):

  • place l'hôte proxy dans le paramètre Host
  • placez le port proxy dans le paramètre port
  • mettez l'URL de destination complète dans le paramètre path:

Qui donne:

var options = {
    Host: '<PROXY_Host>',
    port: '<PROXY_PORT>',
    path: 'http://www.boardgamegeek.com/xmlapi/boardgame/1?stats=1',
    method: 'GET',
    headers: {
        Host: 'www.boardgamegeek.com'
    }
}
9
sdabet

Le changement suivant avec la demande a fonctionné pour moi:

 var options = {
         proxy:'PROXY URL', 
         uri: 'API URL',
         method: 'GET' 
         }
 request(options, function (err, response, body) {
     if(err){
        console.log('error:', err);
       } else {
     console.log('body:', body);
      }
   });
1
hema

J'étais confronté à ce problème sur Ubuntu Server tout en maintenant une instance de nœud sur PM2. Fondamentalement, après avoir redémarré l'instance après avoir tiré, j'obtenais la même erreur lors de la connexion initiale de mySQL dans le code.

Error: connect ETIMEDOUT
at Connection._handleConnectTimeout (/home/deam_server/node_modules/mysql/lib/Connection.js:419:13)
at Object.onceWrapper (events.js:275:13)
at Socket.emit (events.js:182:13)
at Socket.EventEmitter.emit (domain.js:442:20)
at Socket._onTimeout (net.js:447:8)
at ontimeout (timers.js:427:11)
at tryOnTimeout (timers.js:289:5)
at listOnTimeout (timers.js:252:5)
at Timer.processTimers (timers.js:212:10)

Bien que le même code fonctionnait parfaitement sur ma machine locale. Après cela, j'ai utilisé la commande "df" qui m'a aidé à réaliser que mon répertoire racine était occupé à 100%. J'ai alloué de la mémoire au répertoire racine et redémarré l'instance de nœud, puis cela a commencé à fonctionner correctement.

0
Rishikesh Chandra