zoukankan      html  css  js  c++  java
  • node.js使用免费的阿里云ip查询获取ip所在地

    在项目过程中,我们常常需要获取IP的所在地。而这一功能一般都是通过一些数据网站的对外接口来实现,这些接口一般情况下都是付费使用的。在这篇文章中我将记录,基于node.js的阿里云免费IP地址查询接口的使用。

    1.购买服务

    https://market.aliyun.com/products/57002003/cmapi010805.html?spm=5176.2020520132.101.9.R0owP9#sku=yuncode480500000 

     这是阿里云的一个AIP接口,点击上面链接后你会进入以下页面

    点击购买后,会让你登录。阿里云可以用淘宝账户登录,想来应该大家都有。并且这个API不要钱100万次查询,应该足够支撑所有的非商业用途了。

    购买后在控制台的云市场中你可以找到这个订单,点击右侧的接口进入AIP使用教程界面

    这里进去之后是刚才的购买页面,向下滑动就可以看到该API的使用方法

    这里有各种语言的官方示例,当然意料之中的没有Node版,所以下方我将介绍Node的使用方法

    2.搭建服务器

    由于本文主题是使用该接口,所以如果搭建服务器有描述不清的地方请大家谅解。

    这里我使用express搭建的服务器

    先创建一个test文件夹

    文件夹里有两个文件

    第一个是test.js(服务器配置文件)

    第二个是package.json(用于引入express模块)

     

     1 //这里是测试文件test.js
     2 
     3 const http = require('http'),
     4     express = require('express'),
     5     app = express();
     6 
     7 app.use('/',function (req,res) {//访问localhost所有的请求都会进入这里
     8     res.send('服务器启动');
     9 });
    10 
    11 http.createServer(app).listen(80,'0.0.0.0');//创建服务器实例
    {
        "name": "test",
        "version": "1.0.0",
        "dependencies": {
            "express": "latest"
        }
    }
    //package.json

    先在package.json中右键 npm install(cnpm也行)

    我的编译器是webstorm(不一样的同学请按自己的来操作)

    安装完成后就可以运行test.js了

    服务器启动后我们打开浏览器测试一下

    到这里服务器的搭建就完成了

    下面进入Api的使用

    3.Api接口的调用

    在之前的官方页面中有个调试工具点进去你会看见

     根据这个我们进行相关的配置

    首先我们要引入https因为这个请求虽然是get但是要使用https(之前被这个卡了好久一直没有找到原因)

    let option = {
            hostname:"dm-81.data.aliyun.com",//上图的接口域名
            path:`/rest/160601/ip/getIpInfo.json?ip=${ip}`,//上图的path格式 在最后附上你要查询的IP地址(我这里是获取的用户的IP)
            headers:{//设置请求头
                "Content-Type":"application/json; charset=utf-8",
                "Authorization": "APPCODE 这里是你阿里云中那个appcode",
            }
        };

    appcode

    配置参数完成后就可以开始写https请求了

    https.request使用方法与http.request 一致详情请见官网文档(http://nodejs.cn/api/http.html#http_http_request_options_callback)

    let re = https.request(option,(Res)=>{//为了与外层的res区别故此处响应文件用Res
            Res.setEncoding('utf8');
            if(Res.statusCode===200){//若http状态码为200则请求成功
                Res.on('data', (data) => {
                    res.send(data);//将接口返回的数据返回到页面上
                });
            }
        });
        re.on('error', (e) => {
            console.error(`请求遇到问题: ${e.message}`);
        });
        re.end();

    下面粘出完整代码(需要的同学拿走请注明出处 把appcode换成你自己的即可 创作不易望大家点点订阅 手动滑稽)

    //这里是测试文件
    
    const http = require('http'),
        https = require('https'),
        express = require('express'),
        app = express();
    
    app.use('/',function (req,res) {//访问localhost所有的请求都会进入这里
        let ip = req.headers['x-forwarded-for'] ||
            req.connection.remoteAddress ||
            req.socket.remoteAddress ||
            req.connection.socket.remoteAddress;
        let option = {
            hostname:"dm-81.data.aliyun.com",//上图的接口域名
            path:`/rest/160601/ip/getIpInfo.json?ip=${ip}`,//上图的path格式 在最后附上你要查询的IP地址(我这里是获取的用户的IP)
            headers:{//设置请求头
                "Content-Type":"application/json; charset=utf-8",
                "Authorization": "APPCODE 你的appcode",
            }
        };
        let re = https.request(option,(Res)=>{//为了与外层的res区别故此处响应文件用Res
            Res.setEncoding('utf8');
            if(Res.statusCode===200){//若http状态码为200则请求成功
                Res.on('data', (data) => {
                    res.send(data);//将接口返回的数据返回到页面上
                });
            }
        });
        re.on('error', (e) => {
            console.error(`请求遇到问题: ${e.message}`);
        });
        re.end();
    });
    
    http.createServer(app).listen(80,'0.0.0.0');//创建服务器实例

    然后我们再次访问 服务器那个页面返回结果如下(这里我是本地测试所以返回值为内网IP)

     到这里就可以查到访问用户的IP所在地了

    感谢浏览

    欢迎大家一起探讨,共同进步

  • 相关阅读:
    【递归】拆分自然数
    HDOJ3068最长回文
    博弈论——尼姆博奕
    vijos P1047最小公倍数
    Eular质数筛法-hiho一下 第九十三周
    hdoj-5652 India and China Origins二分+bfs
    hdoj-1166排兵布阵 简单的树状数组
    hdoj-5641 king's phone
    hdoj-1548简单的bfs题目
    命令中"|"的意义
  • 原文地址:https://www.cnblogs.com/lhyxq/p/9577082.html
Copyright © 2011-2022 走看看