通过IP获取地址

最近想自己做访问日志,而且想通过用户的IP获取用户的地址,网上搜了一下,好像都是用qq的库来搜索,自己试验了一下都不怎么准,又没有什么服务可以使用。

于是自己想了一个办法,通过网站查询,然后获取返回的html,解析获取查询的地址,比如http://www.ip.cn这个网站就是通过ip查询地址的。

代码很简单

先查询获取网页

public static String getResourcesByURL(String pageUrl,String encoding) throws Exception {
        URL requestURL = new URL(pageUrl);
        if (!Charset.isSupported(encoding)) {
            throw new RuntimeException("encoding:" + encoding + "not supported");
        }
        Charset charset = Charset.forName(encoding);
        String resource = Resources.toString(requestURL, charset);
        return resource;
    }

再解析HTML,获取其中的地址

public static String getAddressByIP(String ip) throws Exception{
        StringBuilder requestURL = new StringBuilder(IP_SEARCH_URL);
        requestURL.append("&ip_url=").append(ip);
        String response = getResourcesByURL(requestURL.toString(),CHARSET_GBK);
        Document doc= Jsoup.parse(response);
        Elements elements= doc.getElementsByClass("well");
        String address="";
        if(elements!=null&&elements.size()>0){
            Element element=elements.get(0).getElementsByTag("p").get(0);
            if(element!=null){
                address=element.text();
                address=address.substring(address.lastIndexOf("来自:")+3);
            }

        }
        return address;
    }

运行

    public static void main(String[] args) {
        try {
            System.out.println(getAddressByIP("110.75.186.221"));
        } catch (Exception e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
    }

就可以得到结果了:

   浙江省杭州市 阿里巴巴软件有限公司

 

posted @ 2013-02-01 13:04  Evanlee  阅读(414)  评论(0编辑  收藏  举报