IP获取归属地区(免费)

IP获取归属地区

使用 http://whois.pconline.com.cn/ipJson.jsp 这个 URL 来获取 IP 地址的归属城市信息

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Objects;
import javax.servlet.http.HttpServletRequest;import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class IpAddressUtils {private static final Logger log = LoggerFactory.getLogger(IpAddressUtils.class);/*** 获取当前网络ip** @param request* @return*/public static String getIpAddr(HttpServletRequest request) {String ipAddress = request.getHeader("x-forwarded-for");if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("Proxy-Client-IP");}if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("WL-Proxy-Client-IP");}if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getRemoteAddr();if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) {//根据网卡取本机配置的IPInetAddress inet = null;try {inet = InetAddress.getLocalHost();} catch (UnknownHostException e) {log.error("Error occurred when getIpAddr method was invoked.ex:", e);}ipAddress = inet.getHostAddress();}}//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割if (ipAddress != null && ipAddress.length() > 15) { //"***.***.***.***".length() = 15if (ipAddress.indexOf(",") > 0) {ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));}}return ipAddress;}/*** IP获取归属地区* @param ipAddress* @return*/public static String getAddress(String ipAddress) {CloseableHttpClient httpClient = null;CloseableHttpResponse response = null;String address = null;try {// 创建 HttpClient 实例httpClient = HttpClients.createDefault();// 构建 API 请求 URLString apiUrl = "http://whois.pconline.com.cn/ipJson.jsp?ip=" + ipAddress;// 创建 HttpGet 请求HttpGet httpGet = new HttpGet(apiUrl);// 发送请求并获取响应response = httpClient.execute(httpGet);// 解析响应if (response.getStatusLine().getStatusCode() == 200) {String jsonResponse = EntityUtils.toString(response.getEntity(), "GBK");address = jsonResponse.substring(jsonResponse.indexOf("addr") + 7, jsonResponse.indexOf("regionNames") - 3);}} catch (IOException e) {e.printStackTrace();} finally {close(httpClient, response);return address;}}public static void close(CloseableHttpClient httpClient, CloseableHttpResponse response) {try {if (Objects.nonNull(response)) {response.close();}if(Objects.nonNull(httpClient)){httpClient.close();}} catch (IOException e) {e.printStackTrace();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/2090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spingboot 多模块引入第三方jar包

1. 在需要的模块中引入jar包 2. 在此模块中的pom.xml 中引用 3. 要想打包部署服务器&#xff0c;需要在启动模块中添加配置信息 ps&#xff1a;启动模块要引用此模块才能将此一起jar打包部署 <build><plugins><plugin><groupId>org.springframework.…

距离比较器

根据传进来的初始点和其他经过点的集合&#xff0c;计算出初始点经过那些途经点的最佳路径。返回的就是初始点然后是途经点排好序的结果。 package com.nbomb.route.util;import com.nbomb.route.domain.Village; import org.springframework.stereotype.Component;import jav…

基于阿里云微信小程序语音识别

页面效果 其中采用阿里云语音识别&#xff1a;阿里云一句话语音识别 语音识别页面 <template><view><view class"chat_list"><view v-for"v in chatList" :class"v.type right ? type_right : type_left"><chat …

Nautilus Chain 更换全新测试网,主网即将在不久上线

目前&#xff0c;Nautilus Chain 正在为主网上线前的最后阶段做准备&#xff0c;据悉该链更新了全新的测试网&#xff0c;在此前版本的测试网的基础上进行了全新的技术升级&#xff0c;最新测试网版本与生态发展的技术规划更为贴近。本次测试网升级将会是最后一次测试网版本的迭…

MacOS上安装Portainer

Portainer介绍 Portainer 是一个很方便的 Docker 可视化管理工具。主要的功能包括: 管理 Docker 主机,可以添加和删除 Docker 主机管理容器,可以启动、停止、删除等容器管理镜像,可以搜索、拉取、删除镜像管理卷,可以查看、删除卷管理网络,可以创建 Docker 网络管理用户和角色…

Redis数据持久化

Redis数据持久化 redis一共提供了两种数据持久化的方式RDB和AOF。 RDB ​ RDB全称为Redis Database Backup file&#xff08;数据备份文件&#xff09;&#xff0c;也被叫做Redis数据快照。简单来说就是将内存中的全部数据都记录到磁盘中&#xff0c;当redis发生宕机或是一些…

VSCode种git rebase分支冲突解决无法继续rebase

情景&#xff1a; 常规来说我们git开分支开发完新功能之后&#xff0c;提交之前rebase dev分支&#xff0c;然后合并到dev上算是开发完成。 问题还原&#xff1a; 在开发完之后执行如下指令&#xff1a; 1.执行变基操作&#xff1a;git rebase dev。 //这一步出现冲突vscode上…

微信小程序基于Promise封装发起网络请求

1.创建一个request.js // 相当于域名 const baseURL ***************; // 暴露一个request函数 export function request(parms) {// 路径拼接const url baseURL parms.url;// 请求体&#xff0c;默认为{}const data parms.data || {};// 请求方式&#xff0c;默认为GETco…

HTTPS详解

1 概述 HTTPS 协议之所以是安全的是因为 HTTPS 协议会对传输的数据进行加密&#xff0c;而加密过程是使用了非对称加密实现。但其实&#xff0c;HTTPS 在内容传输的加密上使用的是对称加密&#xff0c;非对称加密只作用在证书验证阶段。 2 HTTPS请求过程 HTTPS的整体过程分为…

Linux内核移植

标签&#xff1a; Linux内核移植 一、linux内核移植步骤 1、添加自己开发板默认配置文件 将 arch/arm/configs 目录下的官方配置文件imx_v7_mfg_defconfig_defconfig改为&#xff1a;my_xxx_defconfig cd arch/arm/configs cp imx_v7_mfg_defconfig my_xxx_defconfig2、添加…

题解 | #二叉树的镜像#(这个还是以根节点一个为参数较好)

题解 | #求int型正整数在内存中存储时1的个数# import java.util.Scanner; import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 题解 | #字符串最后一个单词的长度# import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息public …

【FAQ】API6低代码开发问题汇总

参考文档&#xff1a; 低代码开发参考文档&#xff1a; 文档中心:使用低代码进行开发 基于景区模板开发元服务&#xff1a; 文档中心:模板简介 使用API6低代码开发遇到的问题汇总情况如下&#xff1a; 1、低代码环境下&#xff0c;如何实现box-shadow阴影效果的配置&#…

【深入了解PyTorch】PyTorch的安装

【深入了解PyTorch】PyTorch的安装 PyTorch的安装一、PyTorch简介二、PyTorch的安装1. 安装前准备2. 环境配置3. 安装PyTorch4. 验证安装CUDA的安装指南1. 确认GPU兼容性2. 下载CUDA安装程序3. 运行CUDA安装程序4. 配置环境变量5. 验证CUDA安装6. 更新GPU驱动(可选)总结PyTor…

Angular 调试工具(Augury)

目录 1、简介 2、检验代码 3、Angury 本地构建和安装 3.1 添加到Chrome 浏览器&#xff1a; 3.2 添加到Firefox浏览器 4、项目中对应的Npm脚本 5、Augury 三大主要功能 5.1 组件树&#xff08;Component Tree&#xff09; 5.1.1 Component Tree 5.2 路由树&#xff0…

带记忆的Transformer模块

MEMORIZING TRANSFORMERS 返回论文和资料目录 论文地址 1.导读 谷歌去年做的一个工作。内容很简单&#xff0c;在Transformer模块中加入了一层记忆层&#xff0c;结果表明这个方法可以帮助模型提高在NLP任务上的表现&#xff1a;generic webtext (C4), math papers (arXiv),…

SSE 和 Websocket 的比较

108. SSE 和 Websocket 的比较 当涉及到实现实时通信的Web应用程序时&#xff0c;两种常见的技术选择是服务器发送事件&#xff08;Server-Sent Events&#xff0c;SSE&#xff09;和WebSocket。虽然它们都可以用于实现实时通信&#xff0c;但它们在工作原理、适用场景和功能上…

Generative Adversarial Network

Goodfellow,2014年 文献阅读笔记--GAN--Generative Adversarial NetworkGAN的原始论文-组会讲解_gan英文论文_Flying Warrior的博客-CSDN博客 启发:如何看两个数据是否来自同一个分布? 在统计中,two sample test。训练一个二分类的分类器,如果能分开这两个数据,说明来自…

HTML <object> 标签

实例 向 HTML 代码添加一个对象&#xff1a; <object classid"clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id"Slider1" width"100" height"50"><param name"BorderStyle" value"1" /><param…

数据库复习

select 查询 字段别名用 as (可以为中文) 例如 select distinct 关键字 去重复值 例如select distinct deptno from test where 条件过滤 and or 和 not运算符 and同时成立 or有一个成立就可以了 优先级and>or>not不符合&#xff08;!&#xff09; in 匹配多个值 selec…

Windows上查看服务器上tensorboad内容

文章目录 前言一、SSH的设置二、tensorboard命令 前言 本篇文章是针对于局域网内的服务器的tensorboard可视化&#xff0c;由于设置方式稍微有点复杂&#xff0c;导致我每次隔了一段时间之后&#xff0c;就不知道该怎么查看tensorboard了&#xff0c;每次都要百度搜一大堆资料…