2017-09-15 12 views
0

サーバーのIP(この場合は自分のコンピューターのパブリックIP)を別のサーバーにHTTPS要求で送信して、そのAPIにアクセスしようとしています。私はサーバー認証を完了し、私はベアラートークンを持っています。私はサーバー側のプログラミングにExpressとNPMを使用しています。私は私のIPアドレスを次のようにしています:要求ヘッダーにIPを送信するNPM

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

私は私の要求を次のようにしています。

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); 
}); 
} 

401エラーが発生しました。私は研究をしており、IPアドレスを送信することとは何かを信じています。ヘッダーに正しく送信していますか?

答えて

0

問題は簡単でした。リクエストヘッダーのAuthorizationセクションに問題があります。読み出し行:

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

をに変更する必要があり:

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

Authorizationヘッダは大文字と小文字が区別されます。それ以外の場合はアクセスが拒否されます。

0

これは一般的な非同期問題です。 ipAddressを送信するには、既に値が割り当てられていることを保証する必要があります。あなたのコードで

publicIp.v4()として

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

は、通常、非同期操作(例えばOpenDNSのからの照会)で、code xがあなたのrequest(...)文が右publicIp.v4().then(...)後の場合を意味し、ipAddress = ip;前に実行され、それは次のようになりますipAddressundefinedとして実行します。

request(...)文がどこか別の場所で実行された場合でも、いくつかの時間後に、ipAddressの準備ができているという保証はありません - publicIp.v4().then(...)は、多くの時間を要するかもしれません。問題を解決するには

、あなたは非同期操作のコールバックにrequest(...)を配置する必要があり、例えば:

var ipAddress; 
publicIp.v4().then(ip => { 
    ipAddress = ip; 
    console.log(ip); 
    request(...); 
}); 
関連する問題