Node.js调用ip接口获取地理信息

最近项目中需要获取访问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地址!"}

有时候接口不稳定会出现返回空值,上面代码已经做了相关处理。

发布了63 篇原创文章 · 获赞 18 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/samfung09/article/details/84308441