通过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. } }
就可以得到结果了:
浙江省杭州市 阿里巴巴软件有限公司