根据IP地址获取省份城市地理信息

有新浪、百度、淘宝等比较多的查询地址。

这里用的百度的

AddressUtils:

package com.shentb.hmb.utils;

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;

import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.websocket.Session;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * 根据IP地址获取详细的地域信息
 *
 * @project:personGocheck
 * @class:AddressUtils.java
 */
public class AddressUtils {
    /**
     * 获取国家省市区信息,返回Map
     *
     * @param ip             请求的参数 格式为:name=xxx&pwd=xxx
     * @param encodingString 服务器端请求编码。如GBK,UTF-8等
     * @return
     * @throws UnsupportedEncodingException
     */
    public static Map getAddresses(String ip, String encodingString)
            throws UnsupportedEncodingException {
        // 这里调用pconline的接口
        if(StringUtils.isBlank(encodingString)){
            encodingString="utf-8";
        }
        String urlStr = "http://ip.taobao.com/service/getIpInfo.php";
        // 从http://whois.pconline.com.cn取得IP所在的省市区信息
        String ipParam = "ip=" + ip;
        String returnStr = getResult(urlStr, ipParam, encodingString);
        if (returnStr != null) {
            JSONObject jsonObject = JSONObject.parseObject(returnStr);
            JSONObject data = (JSONObject) jsonObject.get("data");
            Map rsMap = new HashMap();
            rsMap.put("country", (String) data.get("country"));
            rsMap.put("region", (String) data.get("region"));
            rsMap.put("city", (String) data.get("city"));
            rsMap.put("isp", (String) data.get("isp"));
            rsMap.put("county", (String) data.get("county"));
            //按需获取以下信息
            //国家String country = (String) data.get("country");
            //省份String region = (String) data.get("region");
            //城市String city = (String) data.get("city");
            //联通、电信等String isp = (String) data.get("isp");
            // 处理返回的省市区信息
//            System.out.println(returnStr);
//            {"code":0,"data":{"ip":"122.49.20.247","country":"中国","area":"","region":"北京","city":"北京","county":"XX","isp":"联通","country_id":"CN","area_id":"","region_id":"110000","city_id":"110100","county_id":"xx","isp_id":"100026"}}
//            String[] temp = returnStr.split(",");
//            if(temp.length<3){
//                return "0";//无效IP,局域网测试
//            }
//            String region = (temp[5].split(":"))[1].replaceAll("\"", "");
//            System.err.println(region);
//            region = decodeUnicode(region);// 城市
            /**
             * String country = ""; String area = ""; String region = ""; String
             * city = ""; String county = ""; String isp = ""; for(int i=0;i map = getAddresses(ip, encodingString);
        String country = map.get("country");
        String region = map.get("region");
        String city = map.get("city");
        String county = map.get("county");
        //county没有的话是XX表示
        if (county.equals("XX")) {
            county = "";
        } else {
            county = "-" + county;
        }
        String isp = map.get("isp");
        String addr = country + "-" + region + "-" + city + county + "," + isp;
        return addr;
    }
    /**
     * 获取城市
     *
     * @param ip
     * @param encodingString
     * @return
     */
    public static String getCity(String ip, String encodingString) throws UnsupportedEncodingException {
        if (StringUtils.isBlank(encodingString)) {
            encodingString = "utf-8";
        }
        Map map = getAddresses(ip, encodingString);
        return map.get("city");
    }

    // 测试
    public static void main(String[] args) {
        // 测试ip 219.136.134.157 中国=华南=广东省=广州市=越秀区=电信
//        String ip = "122.49.20.247";
        String ip = "219.136.134.157";
        String addr = "";
//        Map rsMap = new HashMap<>();
        try {
//            rsMap = AddressUtils.getAddresses(ip, "utf-8");
            addr = AddressUtils.getAddr(ip, null);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.err.println("aaaaa");
//        System.out.println(rsMap);
        System.out.println(addr);
        // 输出结果为:广东省,广州市,越秀区(区域可能显示XX)
    }


}

 

你可能感兴趣的:(根据IP地址获取省份城市地理信息)