最近项目中需要获取访问ip的地理信息。
在网上找了一下,找到了一个阿里云的接口,免费的,登录阿里云购买就行了。
购买之后,在阿里云控制台里就可以看到该项服务的AppKey、AppCode等信息
回到购买页面,看看api使用方法,果然不出所料没有Node.js版本。
没关系,可以点击调试去看看,其实就是用Node发起一个get请求而已,只需配置一下请求头,就像写爬虫一样。
下面看代码,这里我用了Promise,注意这里接口是https协议的
/**
* @param {string} ip ip地址
* @method 根据ip地址获取地理信息
*/
function getAddress(ip){
let options = {
hostname: 'dm-81.data.aliyun.com', //接口域
path: `/rest/160601/ip/getIpInfo.json?ip=${ip}`, //请求地址
headers: { //请求头
"Content-Type": "application/json; charset=utf-8",
"Authorization": "APPCODE 你的AppCode"
}
}
return new Promise((resolve, reject) => {
// 发起请求
let req = https.request(options, res => {
let chunks = [];
res.on('data', chunk => {
chunks.push(chunk);
})
res.on('end', () => {
let buffer = Buffer.concat(chunks).toString();
// 如果接口返回空值
let data = buffer ? JSON.parse(buffer) : {code: 1, data: 'ip接口没有返回值'};
resolve(data);
})
})
// 请求出错
req.on('error', err => {
console.log('请求接口出错')
resolve({code: 1, data: "请求ip接口出错"});
})
// 请求结束
req.end();
})
}
接口返回数据如下
ip地址不正确时返回的数据如下
{"code":1,"data":"非法的IP地址!"}
有时候接口不稳定会出现返回空值,上面代码已经做了相关处理。