我正在尝试将服务器的IP(在本例中为我的计算机公共IP)发送到HTTPS请求中的另一台服务器以访问其API。我已经完成了服务器身份验证,我有持有令牌。我使用Express和NPM进行服务器端编程。我得到的IP地址如下:
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 :(得分:0)
这是一个典型的异步问题。要发送ipAddress
,您需要保证已经为其分配了值。
在您的代码中:
var ipAddress;
publicIp.v4().then(ip => {
ipAddress = ip;
console.log(ip);
});
// code x
由于publicIp.v4()
通常是异步操作(例如,来自OpenDNS的查询),code x
在ipAddress = ip;
之前执行,这意味着request(...)
语句恰好在publicIp.v4().then(...)
之后{1}},它将ipAddress
作为undefined
执行。
即使request(...)
语句在其他地方执行,一段时间之后,也无法保证ipAddress
已准备就绪 - publicIp.v4().then(...)
可能会耗费大量时间。
要解决此问题,您需要将request(...)
放入异步操作的回调中,例如:
var ipAddress;
publicIp.v4().then(ip => {
ipAddress = ip;
console.log(ip);
request(...);
});
答案 1 :(得分:0)
问题很简单。请求标头的“授权”部分存在问题。该行的内容为:
'Authorization': "bearer "+ token, //Bearer Token
应改为:
'Authorization': "Bearer "+ token, //Bearer Token
Authorization
标头区分大小写。它需要是资本,否则你将被拒绝访问。