`

java 根据IP地址获取省市区

    博客分类:
  • java
 
阅读更多
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class AddressUtils {

/**
*
* @param content
*            请求的参数 格式为:name=xxx&pwd=xxx
* @param encoding
*            服务器端请求编码。如GBK,UTF-8等
* @return
*/
public String getAddresses(String content, String encodingString) {
// 这里调用pconline的接口
String urlStr = "http://whois.pconline.sscom.cn/ipJson.jsp";
// 从http://whois.pconline.com.cn取得IP所在的省市区信息
String returnStr = this.getResult(urlStr, content, encodingString);
if (returnStr != null) {
// 处理返回的省市区信息
int startIndex = returnStr.indexOf("\"pro");
int endIndex = returnStr.indexOf(",\"addr");
if (startIndex > 0 && endIndex > 0 && endIndex > startIndex) {
returnStr = returnStr.substring(startIndex, endIndex);
returnStr = returnStr.replaceAll("\"", "").replace("pro:", "")
.replace("city:", "").replace("region:", "");
}
}
return returnStr;
}

/**
* @param urlStr
*            请求的地址
* @param content
*            请求的参数 格式为:name=xxx&pwd=xxx
* @param encoding
*            服务器端请求编码。如GBK,UTF-8等
* @return
*/
private 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;
}

// 测试
public static void main(String[] args) {
AddressUtils addressUtils = new AddressUtils();
// 测试ip
String ip = "219.136.134.157";
String address = addressUtils.getAddresses("ip=" + ip, "gbk");
System.out.println(address);
// 输出结果为:广东省,广州市,越秀区
}
}


乱码解决:
/**
* 根据坐标泛解析出地址
*
* @param itude
* @return
* @throws Exception
*/
private static String getLocationAds(String latitude, String longitude) {
JSONObject json = new JSONObject();
String resultString = "";
/** 这里采用get方法,直接将参数加到URL上 */
String urlString = String.format(
" http://maps.google.cn/maps/geo?key=abcdefg&q=%s,%s",
latitude, longitude);
try {
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
if (conn.getResponseCode() != 200) {
System.out.println("链接失败!");
return "";
}
BufferedReader buffReader = new BufferedReader(new InputStreamReader(
conn.getInputStream(),"utf-8"));
StringBuffer strBuff = new StringBuffer();
String result = null;
while ((result = buffReader.readLine()) != null) {
strBuff.append(result);
}
resultString = strBuff.toString();
System.out.println(resultString);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resultString;

}
public static List<String> pcqLocationAds(String latitude, String longitude)
{
String province;// 省
String cityName;// 市
String region;// 地区
JSONObject data;
List<String> li = new ArrayList<String>();
try
{
String str= ResultUtil.getLocationAds(latitude, longitude);
data = new JSONObject(str);
data = ((JSONArray) data.get("Placemark")).getJSONObject(0);
data = (JSONObject) data.get("AddressDetails");
data = (JSONObject) data.get("Country");
data = (JSONObject) data.get("AdministrativeArea");
province = data.get("AdministrativeAreaName").toString();
data = (JSONObject) data.get("Locality");
cityName = data.get("LocalityName").toString();
data = (JSONObject) data.get("DependentLocality");
region = data.get("DependentLocalityName").toString();
li.add(province);
li.add(cityName);
li.add(region);
System.out.println(province);
System.out.println(cityName);
System.out.println(region);
}
catch (Exception e)
{
e.printStackTrace();
}
return li;
}
public static void main(String[] args) {
String s= ResultUtil.getLocationAds("34.221379", "108.915555");

}
分享到:
评论

相关推荐

    java根据ip反查省市县地址

    在Java编程中,根据IP地址反查对应的省市县地址是一项常见的需求,这通常涉及到网络编程和地理信息系统(GIS)的应用。下面将详细讲解如何利用Java实现这一功能。 首先,我们需要理解IP地址的基本概念。IP地址是由...

    Gis根据坐标获取省市区

    在本场景中,我们关注的是如何根据经纬度坐标来获取对应的省市区信息。这涉及到地理编码(Geocoding)的过程,即通过经纬度坐标反向查找其对应的行政区域信息。 首先,我们需要理解经纬度坐标。地球被划分为经度和...

    java获取ip地址返回地区

    在Java编程中,获取IP地址并返回对应的国家、地区以及城市信息是一项常见的需求,尤其是在进行网络定位或数据分析时。为了实现这一功能,开发者通常会利用IP数据库,如QQwry IP库,它包含了全球IP地址与地理位置的...

    java根据ip地址获取详细地域信息的方法

    在互联网技术中,根据IP地址获取用户的地理位置是一个常见的需求。例如,网站可能需要根据访问者的IP来提供地区性的服务或内容。Java作为广泛使用的编程语言,提供了多种方法实现通过IP地址查询地理位置信息。 首先...

    java ip地址解析省市区运营商

    - `InetAddress.getByName(String host)`:通过主机名或IP地址获取`InetAddress`实例。 - `InetAddress.getAddress()`:返回IP地址的字节数组。 - `InetAddress.getHostAddress()`:返回字符串形式的IP地址。 4....

    java ip,身份证等接口查询所在地

    这段代码会加载GeoLite2数据库,并根据给定的IP地址获取对应的国家和城市信息。 接下来是身份证(ID Card)查询。在中国,身份证号码包含了持卡人的出生日期、性别以及籍贯信息。虽然我们不能直接通过身份证号码...

    用java实现输入ip得到地址 成功

    使用这个数据库,我们可以快速地根据输入的IP地址获取到相对应的省市区等信息。 在Java中,实现这一功能需要以下几个步骤: 1. **数据准备**:首先,你需要下载最新的“QQ纯真”IP数据库文件,通常是一个CSV或者...

    IP转换省市区.rar

    Java源文件中的相关代码会读取data文件并根据IP地址查询匹配的省市区信息。 5. **Word说明文档**:此文档可能详细解释了如何使用提供的源码,如何集成到项目中,以及如何调用API和本地解析函数。它还可能包括了使用...

    Jsoup 网络爬虫(动态ip代理,突破ip访问次数限制) 爬取全国各省市区数据

    然而,网络爬虫在抓取大量数据时,可能会触发网站的反爬策略,其中一种常见手段就是限制同一IP地址的访问次数。为了解决这个问题,我们需要实现动态IP代理。动态IP代理通常涉及到以下步骤: 1. **获取代理IP**:...

    ip2region-2.2.0-release.zip

    例如,在Java中,我们可以创建`BinarySearcher`对象,然后调用`search`方法输入IP地址,返回的结果会包含IP所在的省市区信息。 4. **离线特性** IP2Region的一大优点是离线查询,这意味着无需连接互联网就可以进行...

    ipService:基于ip.dat文件的根据IP查询省份和城市

    在查询过程中,我们首先将输入的IP地址转换为整型,然后利用`TreeMap`的`lowerEntry`或`higherEntry`方法找到最接近但不超过该IP的范围,从而确定IP所在的省市区信息。 为了提高性能,可以考虑以下优化策略: 1. ...

    area_ip.rar_MySQL数据库_Java_

    在实际应用中,可能还会编写查询方法,通过Java代码获取特定IP地址所在的省市区信息。 为了提高效率,开发者可能还会考虑数据库索引的设置,比如在`ip_start`字段上创建索引,以便快速查询IP归属地。此外,如果需要...

    javascript实现省市区三级联动下拉框菜单

    在网页开发中,省市区三级联动下拉框菜单是一个常见的需求,主要用于用户填写地址时的选择。这个功能通过JavaScript实现,可以提高用户体验,使得用户能够快速、方便地选择正确的地理位置信息。下面我们将详细讨论...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例071 验证IP地址的有效性 90 实例072 鉴别非法电话号码 91 4.3 操作字符串 92 实例073 根据标点符号对字符串进行分行 92 实例074 将字符串的每个字符进行倒序输出 94 实例075 获取字符串中汉字的个数 94 实例076 ...

    百度地图api所有城市对应的cityCode

    文件包括4个字段,“|”分隔 area_name|area_code|parent_area_code|area_level 例如: 中国|1||0 黑龙江省|2|1|1 大兴安岭地区|38|2|2 黑河市|39|2|2 伊春市|40|2|2 齐齐哈尔市|41|2|2 佳木斯市|42|2|2 ...

    C#实现高德地图定位(包含登录,注册)

    - API限制:理解并遵循高德地图API的使用条款,防止因请求次数过多导致的IP封禁。 总结,实现“C#实现高德地图定位(包含登录,注册)”需要掌握C#的基础语法、ASP.NET身份验证、高德地图API的使用、JSON解析、...

Global site tag (gtag.js) - Google Analytics