Java如何根据IP获取当前定位
当今购物、旅游等服务型的网站如此流行,我们有时候也会碰到这样网站的开发。
在开发此类网站时,为了增加用户的体验感受,我们不得不在用户刚进入网站时定位到用户所在地,
更好的为用户推荐当地产品。比如去哪儿,携程,美团等都会有定位功能。
那么我们怎样“贴心”的为用户定位呢?
1.首先我们需要先获取本机的外网ip
/**
* 得到本机的外网ip,出现异常时返回空串""
* @return
*/
public static String getPublicIP() {
String ip = "";
org.jsoup.nodes.Document doc = null;
Connection con = null;
con = Jsoup.connect("http://www.ip138.com/ip2city.asp").timeout(10000);
try {
doc = con.get();
// 获得包含本机ip的文本串:您的IP是:[xxx.xxx.xxx.xxx]
org.jsoup.select.Elements els = doc.body().select("center");
for (org.jsoup.nodes.Element el : els) {
ip = el.text();
}
// 从文本串过滤出ip,用正则表达式将非数字和.替换成空串""
ip = ip.replaceAll("[^0-9.]", "");
} catch (IOException e) {
e.printStackTrace();
}
return ip;
}
2.定义一个方法,将字符拼接成字符串
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
3.将URL资源解析成json对象
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
InputStream is = null;
try {
is = new URL(url).openStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONObject json = new JSONObject(jsonText);
return json;
} finally {
//关闭输入流
is.close();
}
}
4.获取当地地址名,这个可以根据自己的具体需求更改。参数ak后面的值是ip定位api服务的密钥,
这个可以自己去百度申请,详见 http://api.map.baidu.com/lbsapi/cloud/ip-location-api.htm
public static String getAddrName() throws JSONException, IOException{
//这里调用百度的ip定位api服务 详见 http://api.map.baidu.com/lbsapi/cloud/ip-location-api.htm
JSONObject json = readJsonFromUrl("http://api.map.baidu.com/location/ip?ak=iTrwV0ddxeFT6QUziPQh2wgGofxmWkmg&ip="+getPublicIP());
/* 获取到的json对象:
* {"address":"CN|河北|保定|None|UNICOM|0|0",
* "content":{"address_detail":{"province":"河北省","city":"保定市","street":"","district":"","street_number":"","city_code":307},
* "address":"河北省保定市","point":{"x":"12856963.35","y":"4678360.5"}},
* "status":0}
*/
//这里我们可以输出json看一下具体格式
System.out.println(json.toString());
JSONObject content=json.getJSONObject("content"); //获取json对象里的content对象
JSONObject addr_detail=content.getJSONObject("address_detail");//从content对象里获取address_detail
String city=addr_detail.get("city").toString(); //获取市名,可以根据具体需求更改,如果需要获取省份的名字,可以把“city”改成“province”...
return city;
}
5.这里我们写一个主方法方便于测试
public static void main(String[] args) throws IOException, JSONException {
System.out.println(getAddrName());
}
运行结果:

Java如何根据IP获取当前定位的更多相关文章
- Java实现通过IP获取域名,通过域名获取IP
一.通过Linux命令实现 ping www.baidu.com nslookup www.baidu.com nslookup 14.215.177.166 为什么这个命令会有一个192.168.1 ...
- java根据本地Ip获取mac地址
import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; impo ...
- thinkphp IP获取和定位
系统内置了get_client_ip方法用于获取客户端的IP地址,使用示例: $ip = get_client_ip(); 如果要支持IP定位功能,需要使用扩展类库Org\Net\IpLocation ...
- Java使用纯真IP库获取IP对应省份和城市
原文:http://blog.csdn.net/chwshuang/article/details/78027873?locationNum=10&fps=1 Java使用纯真IP库获取IP对 ...
- java 通过ip获取客户端mac地址
java 通过ip获取客户端mac地址 package com.asppro.util; import java.io.BufferedReader; import java.io.IOExcepti ...
- Java 根据IP获取地址
用淘宝接口:(源码:java 根据IP地址获取地理位置) pom.xml: <!-- https://mvnrepository.com/artifact/net.sourceforge.jre ...
- Java Web应用中获取用户请求相关信息,如:IP地址、操作系统、浏览器等信息
引入jar包 <dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUti ...
- JAVA从本机获取IP地址
JAVA从本机获取IP地址 论述: 此篇博客是在工作的时候,需要获得当前网络下面正确的ip地址,在网上查阅很多博客,网上一个比较普遍的说法是通过InetAddress.getLocalHost().g ...
- Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP
Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP IP 工具类 源代码: /** * <p> * * @author XiaoPengwei ...
随机推荐
- Callback
由于 JavaScript 语句(指令)是逐一执行的 - 按照次序,动画之后的语句可能会产生错误或页面冲突,因为动画还没有完成. 为了避免这个情况,您可以以参数的形式添加 Callback 函数. j ...
- 关于Java String对象创建的几点疑问
我们通过JDK源码会知道String实质是字符数组,而且是不可被继承(final)和具有不可变性(immutable).可以如果想要了解String的创建我们需要先了解下JVM的内存结构. 1.JVM ...
- Asterisk 未来之路3.0_0007
原文:Asterisk 未来之路3.0_0007 Modules Asterisk 是基于模块构建的.一个模块提供某个特定的功能,它是动态的被装载.比如:信道驱动(chan_sip.so),或可以连接 ...
- css-缩写
border缩写 /*缩写前*/ element{ border-top-width:1px; border-top-style:solid; border-top-color:#cccccc; } ...
- 完整的堆栈JavaScript路(十五)HTML5 focus 扩大 (扩展点)
HTML5 加入辅助管理 focus 产品特点, 有办法获得焦点文档; 页面加载,用户输入(通常由tab债券).和 调用代码focus()功能. HTML5新的属性和方法,辅助管理的重点: docu ...
- Windows Azure
Windows Azure初体验 目前在IT界,云这个概念的第一意思不再是词典里的解释了.不过它们还是有相同点的——也许确实会酝酿出一块大蛋糕,可也是飘在天上,众神分食之,与我等P民无关.所谓云,不过 ...
- 谈一谈struts2和springmvc的拦截器
最近涉及到了两个项目,都需要考虑全局的拦截器,其功能就是判断session的登陆状态,如果session信息完好,可以从中取得相应的信息,则放行,否则拦截,进入重定向的uri. 既然是全局的拦截器,其 ...
- "手机信号放大器" 让手机信号增强的办法
我的住处信号及其的差,电话基本打不进来,放大器的话便宜的也得一百多,于是自己尝试各种办法让自己的手机有信号,于是奇迹般的成功了: 将手机放于铁缸内,并45度角斜放,刚好淹没手机为佳.于是信号奇迹般的3 ...
- ASP.NET SignalR 2.0入门指南
ASP.NET SignalR 2.0入门指南 介绍SignalR ASP.NET SignalR 是一个为 ASP.NET 开发人员的库,简化了将实时 web 功能添加到应用程序的过程.实时Web功 ...
- SZU:B85 Alec's Eggs
Description Eggs Alec has a lot of eggs. One day, he want to sort them in a ascending sequence by we ...