直接参考文章
SpringBoot整合ip2region实现使用ip监控用户访问城市
2026-01-06 start:
/**
* 获取IP归属地
* @param ipAddress IP地址
* @return IP归属地信息
*/
private String getIpLocation(String ipAddress) {
try {
String result = HttpUtil.get("http://www.cip.cc/" + ipAddress);
if (StrUtil.isBlank(result)) {
return null;
}
// 提取 <pre> 标签中的内容
int preStart = result.indexOf("<pre>");
int preEnd = result.indexOf("</pre>");
if (preStart < 0 || preEnd < 0 || preStart >= preEnd) {
log.debug("无法找到 <pre> 标签,IP: {}", ipAddress);
return null;
}
String preContent = result.substring(preStart + 5, preEnd).trim();
// 使用正则表达式匹配"地址 :"这一行
// 匹配格式:地址 : 中国 广东 广州
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("地址\\s*[::]\\s*(.+)");
java.util.regex.Matcher matcher = pattern.matcher(preContent);
if (matcher.find()) {
String location = matcher.group(1).trim();
// 移除可能的换行符和其他空白字符
location = location.replaceAll("\\s+", " ").trim();
if (StrUtil.isNotBlank(location)) {
return location;
}
}
log.debug("无法解析IP归属地,IP: {}, 内容: {}", ipAddress, preContent);
} catch (Exception e) {
log.debug("获取IP归属地失败,IP: {}, 错误: {}", ipAddress, e.getMessage());
}
return null;
}
end