在项目过程中,我们常常需要获取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模块)

 //这里是测试文件test.js

 const http = require('http'),
express = require('express'),
app = express(); app.use('/',function (req,res) {//访问localhost所有的请求都会进入这里
res.send('服务器启动');
}); 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所在地了

感谢浏览

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

node.js使用免费的阿里云ip查询获取ip所在地的更多相关文章

  1. 阿里云服务器迁移更改IP,导致网站挂掉

    从昨日下午三点阿里云主机迁移变更IP导致网站挂点,到刚刚网站.手机客户端均恢复访问,这个过程持续了24个钟头.最后还是我自己解决了问题. 哎,真是揪心. 其间和阿里云工程师反复沟通,昨日沟通到今日凌晨 ...

  2. Java使用纯真IP库获取IP对应省份和城市

    原文:http://blog.csdn.net/chwshuang/article/details/78027873?locationNum=10&fps=1 Java使用纯真IP库获取IP对 ...

  3. 使用新浪IP库获取IP详细地址

    使用新浪IP库获取IP详细地址 <?php class Tool{ /** * 获取IP的归属地( 新浪IP库 ) * * @param $ip String IP地址:112.65.102.1 ...

  4. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  5. Node.js 部署免费/自动续订 HTTPS

    随着互联网快速发展,互联网信息安全越来越受到大家重视,HTTPS 应该是近两年各大厂商都在尽力普及的技术之一.国内大厂基本上已经全面普及了 HTTPS. 本文首发于我的个人网站:听说 - https: ...

  6. 通过阿里云ECS服务器公网ip访问tomcat,nginx

    一.概述 1.操作系统:centos7 2.安装nginx方法:https://www.cnblogs.com/boonya/p/7907999.html,亲测可用. 3.tomcat版本:apach ...

  7. 通过阿里云域名动态解析 IP 地址

    这两天在家里用树莓派折腾了一个家用服务器,主要用来做 mac 的 Time Machine ,还有就是当做下载机和 nas ,想着平时上班时间家里没人用网络,空着也是空着,就可以利用空闲带宽下个美剧啥 ...

  8. 阿里云服务器 nginx 公网 IP 无法访问 浏览器

    配置完成 nginx 后, 在浏览器输入:http://ip,正常的话,会有页面,welcome to nginx但是浏览器显示访问失败 主要从两个方面找原因,一个是阿里云的安全组和服务器的防火墙是否 ...

  9. 阿里云服务器怎么用ip访问不了

    个人想做个网站,就买了个阿里云服务器,不得不说阿里的安全做的很好,但是对于我这种小白,就成了麻烦了 工具/原料   阿里云服务器 方法/步骤     首先百度搜索阿里云,进入登录界面,输入账号密码登录 ...

随机推荐

  1. go语言学习逻辑运算符if判断,iota的理解

    第一天学习go语言,首先吐槽一下,配置go语言浪费了我两个小时的时间 不是在百度,就是在百度的路上,这里介绍一下我的go语言的版本和开发平台 go语言1.12版本,之前没有用过在早的版本了首先记录一下 ...

  2. gooflow学习笔记

    前端jqury脚本实现流程设计,兼容目前主流浏览器 gooflow 默认属性节点只有:id,name,top,left,width,height,type (各个版本不同,属性节点有所增加),但是这些 ...

  3. Thread类与Runnable接口的深入理解

    Thread类与Runnable接口的深入理解1.Thread类实现了Runnable接口,实现run方法,其中target参数对应的就是一个Runnable接口的实现类 @Override publ ...

  4. win7系统 LR11 安装与破解

    注意一定要以管理员身份运行启动LR程序 Loadrunner11 安装: 1.运行“setup.exe” 2. 点击安装,其中会有提示缺少“Microsoft Visual C++ 2005 SP1等 ...

  5. 设计模式学习心得<代理模式 Proxy>

    在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 概述 意图 为其他对象提供 ...

  6. 自己搭建git服务器

    1.安装git 2.创建git用户,给权限(git目录下) 3.设置公钥 4.初始化git仓库 5.给权限(仓库) 连接到本地

  7. rtx tiny os

    一,简单测试步骤: 1.  license management包含两项:artx51 real time os, PK51 2. code #include "rtx51tny.h&quo ...

  8. SpringBoot放置在static下面的静态页面无法访问

    最近写项目本来写的好好的,突然static的静态页面访问不了了. 于是我各种上网查资料,看大佬的解决方案,还是没有解决. 直到发现了这篇文章 https://blog.csdn.net/cmqwan/ ...

  9. python3 第三十章 - 内置函数之Dictionary相关

    Python字典包含了以下内置函数: 序号 函数及描述 实例 1 len(dict)计算字典元素个数,即键的总数. >>> dict = {'Name': 'cnblogs', 'A ...

  10. robotframework+selenium搭配chrome浏览器,web测试案例(搭建篇)

    这两天发布版本 做的事情有点多,都没有时间努力学习了,先给自己个差评,今天折腾了一天, 把robotframework 和 selenium 还有appnium 都研究了一下 ,大概有个谱,先说说we ...