通过ip获取用户所在地
直接贴代码了,不多说了
public class AddressUtils {/*** 将返回的信息编码格式改为自己设定的编码格式* @author MOSHUNWEI* @param content * 请求的参数 格式为:name=xxx&pwd=xxx * @param encoding * 服务器端请求编码。如GBK,UTF-8等 * @return * @throws UnsupportedEncodingException */ public static String getAddresses(String content, String encodingString) throws UnsupportedEncodingException { // 这里调用淘宝API String urlStr = "http://ip.taobao.com/service/getIpInfo.php"; // 从http://whois.pconline.com.cn取得IP所在的省市区信息 // String urlStr = "http://whois.pconline.com.cn"; String returnStr = getResult(urlStr, content, encodingString); if (returnStr != null) { // 处理返回的省市区信息 returnStr = decodeUnicode(returnStr); String[] temp = returnStr.split(","); if(temp.length<3){ return "0";//无效IP,局域网测试 } return returnStr; } return null; } /** * http请求,返回ip的详细信息* @author MOSHUNWEI* @param urlStr * 请求的地址 * @param content * 请求的参数 格式为:name=xxx&pwd=xxx * @param encoding * 服务器端请求编码。如GBK,UTF-8等 * @return */ private static String getResult(String urlStr, String content, String encoding) { URL url = null; HttpURLConnection connection = null; try { url = new URL(urlStr); connection = (HttpURLConnection) url.openConnection();// 新建连接实例 connection.setConnectTimeout(2000);// 设置连接超时时间,单位毫秒 connection.setReadTimeout(2000);// 设置读取数据超时时间,单位毫秒 connection.setDoOutput(true);// 是否打开输出流 true|false connection.setDoInput(true);// 是否打开输入流true|false connection.setRequestMethod("POST");// 提交方法POST|GET connection.setUseCaches(false);// 是否缓存true|false connection.connect();// 打开连接端口 DataOutputStream out = new DataOutputStream(connection .getOutputStream());// 打开输出流往对端服务器写数据 out.writeBytes(content);// 写数据,也就是提交你的表单 name=xxx&pwd=xxx out.flush();// 刷新 out.close();// 关闭输出流 BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(), encoding));// 往对端写完数据对端服务器返回数据 // ,以BufferedReader流来读取 StringBuffer buffer = new StringBuffer(); String line = ""; while ((line = reader.readLine()) != null) { buffer.append(line); } reader.close(); return buffer.toString(); } catch (IOException e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect();// 关闭连接 } } return null; } /** * unicode 转换成 中文 * * @author MOSHUNWEI* @param theString * @return 设定的编码格式*/ public static String decodeUnicode(String theString) { char aChar; int len = theString.length(); StringBuffer outBuffer = new StringBuffer(len); for (int x = 0; x < len;) { aChar = theString.charAt(x++); if (aChar == '\\') { aChar = theString.charAt(x++); if (aChar == 'u') { int value = 0; for (int i = 0; i < 4; i++) { aChar = theString.charAt(x++); switch (aChar) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': value = (value << 4) + aChar - '0'; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': value = (value << 4) + 10 + aChar - 'a'; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': value = (value << 4) + 10 + aChar - 'A'; break; default: throw new IllegalArgumentException( "Malformed encoding."); } } outBuffer.append((char) value); } else { if (aChar == 't') { aChar = '\t'; } else if (aChar == 'r') { aChar = '\r'; } else if (aChar == 'n') { aChar = '\n'; } else if (aChar == 'f') { aChar = '\f'; } outBuffer.append(aChar); } } else { outBuffer.append(aChar); } } return outBuffer.toString(); } /*** 通过ip获取详细的地区(城市)* @param ip 入参* @return 返回map,key-value说明:country=国家,area=地区,region=省,city=城市,county=县/区* isp=通讯商,country_id=国家编号,area_id=地区号,region_id=省编号,city_id=市编号,* county_id=县/区编号,isp_id=国家通讯公司号* @author MOSHUNWEI*/public static Map<String,String> getMap(String ip){Map<String,String> resultMap = new HashMap<String,String>();String json_result = null;try { json_result = AddressUtils.getAddresses("ip=" + ip, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }JSONObject json = JSONObject.fromObject(json_result); String country = JSONObject.fromObject(json.get("data")).get("country").toString(); String area = JSONObject.fromObject(json.get("data")).get("area").toString(); String region = JSONObject.fromObject(json.get("data")).get("region").toString(); String city = JSONObject.fromObject(json.get("data")).get("city").toString(); String county = JSONObject.fromObject(json.get("data")).get("county").toString(); String isp = JSONObject.fromObject(json.get("data")).get("isp").toString(); String country_id = JSONObject.fromObject(json.get("data")).get("country_id").toString();String area_id = JSONObject.fromObject(json.get("data")).get("area_id").toString();String region_id = JSONObject.fromObject(json.get("data")).get("region_id").toString();String city_id = JSONObject.fromObject(json.get("data")).get("city_id").toString();String county_id = JSONObject.fromObject(json.get("data")).get("county_id").toString();String isp_id = JSONObject.fromObject(json.get("data")).get("isp_id").toString();resultMap.put("country", country);resultMap.put("area", area);resultMap.put("region", region);resultMap.put("city", city);resultMap.put("county", county);resultMap.put("isp", isp);resultMap.put("country_id", country_id);resultMap.put("area_id", area_id);resultMap.put("region_id", region_id);resultMap.put("city_id", city_id);resultMap.put("county_id", county_id);resultMap.put("isp_id", isp_id);return resultMap;}/*** 测试* @author MOSHUNWEI* @param args*/public static void main(String[] args) { try{ System.out.println(AddressUtils.getMap("119.29.58.21").toString());} catch (Exception e){ e.printStackTrace(); } }
}
通过ip获取用户所在地相关推荐
- 百度接口通过ip获取用户所在地
以下是我看到的资料,我在引擎中用插件连接了"http://opendata.baidu.com/api.php?query=" + strIP+"&co=& ...
- PHP根据IP获取当前所在地地址
原理简述: 利用"ip.taobao.com"提供的一个功能,先获取json格式字符串,再解码json字符串 新建文件getaddress.class.php: <?php ...
- 根据ip获取用户地址-百度
2019独角兽企业重金招聘Python工程师标准>>> 百度的Api:GET请求 https://openapi.baidu.com/rest/2.0/iplib/query?acc ...
- 使用ajax获取用户所在地的天气
1.要获取用户归属地的天气,首先得获取用户所在的市区, 这里先获取用户的IP,通过IP获取IP的归属地,从而得到用户 地址. 获取客户端ip: js: <scripttype="tex ...
- 通过用户电脑ip获取用户当前所在城市以及天气
1.先获取当前用户得ip地址 $.ajax({ url: 'http://pv.sohu.com/cityjson?ie=utf-8', dat ...
- uni-app获取用户所在地
定位成功,返回城市地址的信息 获得用户城市 我试了很久没有问题 有问题的是我的代码,还有模拟器上的模拟定位 =-= <!-- 页面渲染 --><view class=" ...
- java ip 国家_java通过ip获取用户所在国家 | 学步园
什么是GeoIP ? 所谓GeoIP,就是通过来访者的IP, 定位他的经纬度,国家/地区,省市,甚至街道等位置信息的一个数据库.GeoIP有两个版本,一个免费版,一个收费版本.收费版本的准确率和数据更 ...
- vue获取用户本机ip方法
记录vue获取用户本机ip方法 <script setup> import { reactive, toRefs ,onMounted} from "vue" cons ...
- pc端js获取当前经纬度_js获取用户当前地理位置(省、市、经纬度)
在很多情况下,我们需要用到定位功能,来获取用户当前位置.当前比较流行的定位API有腾讯地图.百度地图.高德地图.搜狗地图等等,在这里我使用的是腾讯地图定位API,根据用户IP获取用户当前位置,API返 ...
- html5经纬度定位 源码_h5实现获取用户地理定位的实例代码
最近做的一个项目中有一个获取周围商户的功能,需要用到地理定位系统, 于是便想到了用 h5 的地理定位,查阅了下资料后,简单封装了下代码. const getPosition = ( timeout = ...
最新文章
- python与c语言在语法上的区别-C语言和Python编程先学习哪个
- 卡巴斯基文件服务器,卡巴斯基更新服务器的解决方案
- RH442-3 队列技术
- 中国已消失的九所世界级大学
- 图---Dijstra
- HDU - 1028——母函数入门
- 2011年的MVP礼包
- Geth搭建以太坊主网公有节点笔记
- Intellij IDEA 通过数据库表逆向生成带注释的实体类文件超级详细步骤,附详细解决方案
- Linux /boot分区空间不足
- Windows 7安全指南
- 删除root 家目录,及恢复方法
- http中url的长度限制
- 课题:交通标志识别——设计思路与实现步骤记录
- iOS播放器常用功能
- Qt示例程序打开失败,出现一个感叹号图标
- python执行pip指令时,提示“You should consider upgrading……”的解决方法
- c#文本文件文本替换_如何替换许多文件中存在的文本?
- 计算机专业英语博士就业情况,北京外国语大学博士就业前景怎么样
- 关于微功率短距离无线电发射设备,无需做SRRC认证