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模块)

//这里是测试文件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所在地的更多相关文章
- 阿里云服务器迁移更改IP,导致网站挂掉
从昨日下午三点阿里云主机迁移变更IP导致网站挂点,到刚刚网站.手机客户端均恢复访问,这个过程持续了24个钟头.最后还是我自己解决了问题. 哎,真是揪心. 其间和阿里云工程师反复沟通,昨日沟通到今日凌晨 ...
- Java使用纯真IP库获取IP对应省份和城市
原文:http://blog.csdn.net/chwshuang/article/details/78027873?locationNum=10&fps=1 Java使用纯真IP库获取IP对 ...
- 使用新浪IP库获取IP详细地址
使用新浪IP库获取IP详细地址 <?php class Tool{ /** * 获取IP的归属地( 新浪IP库 ) * * @param $ip String IP地址:112.65.102.1 ...
- python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...
- Node.js 部署免费/自动续订 HTTPS
随着互联网快速发展,互联网信息安全越来越受到大家重视,HTTPS 应该是近两年各大厂商都在尽力普及的技术之一.国内大厂基本上已经全面普及了 HTTPS. 本文首发于我的个人网站:听说 - https: ...
- 通过阿里云ECS服务器公网ip访问tomcat,nginx
一.概述 1.操作系统:centos7 2.安装nginx方法:https://www.cnblogs.com/boonya/p/7907999.html,亲测可用. 3.tomcat版本:apach ...
- 通过阿里云域名动态解析 IP 地址
这两天在家里用树莓派折腾了一个家用服务器,主要用来做 mac 的 Time Machine ,还有就是当做下载机和 nas ,想着平时上班时间家里没人用网络,空着也是空着,就可以利用空闲带宽下个美剧啥 ...
- 阿里云服务器 nginx 公网 IP 无法访问 浏览器
配置完成 nginx 后, 在浏览器输入:http://ip,正常的话,会有页面,welcome to nginx但是浏览器显示访问失败 主要从两个方面找原因,一个是阿里云的安全组和服务器的防火墙是否 ...
- 阿里云服务器怎么用ip访问不了
个人想做个网站,就买了个阿里云服务器,不得不说阿里的安全做的很好,但是对于我这种小白,就成了麻烦了 工具/原料 阿里云服务器 方法/步骤 首先百度搜索阿里云,进入登录界面,输入账号密码登录 ...
随机推荐
- docker-compose安装
安装docker-compose两种最新的docker安装方式 1.从github上下载docker-compose二进制文件安装下载最新版的docker-compose文件 $ sudo curl ...
- js/jquery遇到的坑总结
1.“removeAttribute is not a function” error message 原因以及解决方法:removeAttribute is a JavaScript DOM fun ...
- 使用idea的springboot项目出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
参考: https://www.cnblogs.com/lfm601508022/p/InvalidBoundStatement.html https://blog.csdn.net/xsggsx/a ...
- es5的语法学习
1. strict模式 严格模式,限制一些用法,'use strict'; 2. Array增加方法 增加了every.some .forEach.filter .indexOf.lastIndexO ...
- koa 学习1
1.搭建环境; npm init -f 2.出现错误 npm ERR!Windows_NT 6.1.7601 解决方法: npm config set proxy null npm install ...
- 解决Kettle与Kerberos集成问题
本文目的:记录Kerberos环境下,通过Kettle将MySQL数据清洗到HDFS过程解决的2个问题,希望对大家有所帮助. Kettle版本:pdi-ce-7.1.0.0-12 1.在Kerbero ...
- java.sql.SQLException: Field 'id' doesn't have a default value
1:id 列要设置成自增,自动赋值 java.sql.SQLException: Field 'id' doesn't have a default value at com.mysql.jdbc.S ...
- python3 第二十八章 - 内置函数之List相关
Python包含以下函数: 序号 函数 实例 1 list.append(obj)在列表末尾添加新的对象 2 list.count(obj)统计某个元素在列表中出现的次数 3 list.ext ...
- HDU4460
#include <iostream> #include <queue> #include <vector> #include <cstring> #i ...
- SQL语句操作数据
--切换数据库:手动切换和命令切换 use MySchool --向Student表中插入数据 --语法:INSERT [INTO] 表名 (列名) VALUES (值列表) --注意事项: --1. ...