2017-09-15 3 views
0

J'essaie d'envoyer l'adresse IP du serveur (dans ce cas, l'adresse IP de mon ordinateur) à un autre serveur dans une requête HTTPS pour accéder à leur API. J'ai terminé l'authentification du serveur et j'ai mon jeton de support. J'utilise un Express et un NPM pour la programmation côté serveur. Je reçois mon adresse IP comme suit:Envoi d'IP dans l'en-tête de requête NPM

var ipAddress; 
publicIp.v4().then(ip => { 
    ipAddress = ip; 
    console.log(ip); 
}); 

Je fais ma demande comme suit.

request({ 

    //Set the request Method: 
    method: 'POST', 
    //Set the headers: 
    headers: { 
    'Content-Type': 'application/json', 
    'Authorization': "bearer "+ token, //Bearer Token 
    'X-Originating-Ip': ipAddress //IP Address 
    }, 
    //Set the URL: 
    url: 'end point url here', 
    //Set the request body: 
    body: JSON.stringify('request body here' 
    }), 
}, function(error, response, body){ 

    //Alert the response body: 
    console.log(body); 
    console.log(response.statusCode); 
}); 
} 

Je reçois une erreur 401. J'ai fait de la recherche et je crois que c'est quelque chose à voir avec l'envoi de l'adresse IP. Est-ce que je l'envoie correctement dans l'en-tête?

Répondre

0

Le problème était simple. Il y a un problème dans la section Autorisation de l'en-tête de la demande. La ligne qui se lit comme suit:

'Authorization': "bearer "+ token, //Bearer Token 

doit être remplacé par:

'Authorization': "Bearer "+ token, //Bearer Token 

tête Authorization est sensible à la casse. Cela doit être capital sinon l'accès vous sera refusé.

0

Ceci est un problème asynchrone typique. Pour envoyer ipAddress, vous devez d'abord vous assurer qu'une valeur lui a déjà été affectée.

Dans votre code:

var ipAddress; 
publicIp.v4().then(ip => { 
    ipAddress = ip; 
    console.log(ip); 
}); 
// code x 

Comme publicIp.v4() est normalement une opération asynchrone (requête de OpenDNS par exemple), code x est exécutée avant ipAddress = ip;, ce qui signifie que si votre déclaration request(...) est juste après publicIp.v4().then(...), il sera exécuté avec ipAddress en tant que undefined.

Même si l'instruction request(...) est exécutée ailleurs, un certain temps après, il n'y a aucune garantie que ipAddress est prêt - publicIp.v4().then(...) peut coûter beaucoup de temps.

Pour résoudre ce problème, vous devez mettre request(...) dans le rappel de fonctionnement asynchrone, tels que:

var ipAddress; 
publicIp.v4().then(ip => { 
    ipAddress = ip; 
    console.log(ip); 
    request(...); 
});