3.阿里巴巴提供了接口,但不支持js跨域请求回调,我们可以在java代码中请求,返回参数:

//工具类
public class ResponseUtil {public static void write(HttpServletResponse response,Object o)throws Exception{response.setContentType("text/html;charset=utf-8");PrintWriter out=response.getWriter();out.println(o.toString());out.flush();out.close();}}

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import java.util.concurrent.Callable;public class IPLocationTask implements Callable<Map<String, String>>  {private String id;private String uri;private String type;public IPLocationTask(String id,String type, String url) {super();this.id = id;this.uri = url;this.type = type;}@Overridepublic Map<String, String> call() throws Exception {URL url=new URL(uri);HttpURLConnection conn = (HttpURLConnection)url.openConnection();  conn.setReadTimeout(10*1000);  conn.setRequestMethod("GET");  InputStreamReader  inStream = new InputStreamReader(conn.getInputStream(),"UTF-8");  BufferedReader buffer=new BufferedReader(inStream);  String inputline=null;String info="";while((inputline=buffer.readLine())!=null){  info+=inputline;  }  System.out.println(type+"=="+info);return IPLocationParseUtil.parse(type, info);}}
 private String id;private String uri;private String type;public IPLocationTask(String id,String type, String url) {super();this.id = id;this.uri = url;this.type = type;}@Overridepublic Map<String, String> call() throws Exception {URL url=new URL(uri);HttpURLConnection conn = (HttpURLConnection)url.openConnection();  conn.setReadTimeout(10*1000);  conn.setRequestMethod("GET");  InputStreamReader  inStream = new InputStreamReader(conn.getInputStream(),"UTF-8");  BufferedReader buffer=new BufferedReader(inStream);  String inputline=null;String info="";while((inputline=buffer.readLine())!=null){  info+=inputline;  }  System.out.println(type+"=="+info);return IPLocationParseUtil.parse(type, info);}}

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

import com.alibaba.fastjson.JSON;

public class IPLocationParseUtil {
    /**
     * 解析 各ip查询提供 服务的返回结果
     * @param type
     * @param result
     * @return
     */
    public static Map<String, String> parse(String type,String result){
        
        if(StringUtils.isEmpty(result)){
            Map<String, String> error=new HashMap<String, String>();
            error.put("status", "error");
            error.put("msg", "exception");
            return error;
        }
        
        Map<String, String> map=new HashMap<String, String>();
        map.put("type", type);
        switch (type) {
        case "taobao":
            //{"code":0,"data":{"country":"\u4e2d\u56fd","country_id":"CN","area":"\u897f\u5317","area_id":"600000","region":"\u7518\u8083\u7701","region_id":"620000","city":"\u5170\u5dde\u5e02","city_id":"620100","county":"","county_id":"-1","isp":"\u7535\u4fe1","isp_id":"100017","ip":"42.91.160.188"}}
            Map<String, Object> obj =(Map<String, Object>) JSON.parse(result);
            if(obj!=null&&"0".equals(String.valueOf(obj.get("code")))){
                Map<String, String> data=(Map<String, String>)obj.get("data");
                map.put("status", "0");
                map.put("nation", data.get("country"));
                map.put("provice", data.get("region"));
                map.put("city", data.get("city"));
                map.put("isp", data.get("isp"));
                map.put("cityCode", data.get("city_id"));
                map.put("proviceCode", data.get("region_id"));
            }
            break;
        case "sina":
            //{"ret":1,"start":-1,"end":-1,"country":"\u4e2d\u56fd","province":"\u6d59\u6c5f","city":"\u676d\u5dde","district":"","isp":"","type":"","desc":""}
            Map<String, String> objs =(Map<String, String>) JSON.parse(result);
            if(objs!=null&&"1".equals(String.valueOf(objs.get("ret")))){
                map.put("status", "0");
                map.put("nation", objs.get("country"));
                map.put("provice", objs.get("province"));
                map.put("city", objs.get("city"));
                map.put("isp", objs.get("isp"));
                map.put("cityCode", "-1");
                map.put("proviceCode", "-1");
            }
            break;
            
        case "m126":
            //var lo="甘肃省", lc="兰州市"; var localAddress={city:"兰州市", province:"甘肃省"}
            String retStr=result.substring( result.indexOf("{"),result.lastIndexOf("}")+1);
            Map<String, String> objm =(Map<String, String>) JSON.parse(retStr);
            //中文乱码,暂不解决
            break;
        case "baidu":
            //{"address":"CN|\u7518\u8083|\u5170\u5dde|None|CHINANET|0|0","content":{"address_detail":{"province":"\u7518\u8083\u7701","city":"\u5170\u5dde\u5e02","district":"","street":"","street_number":"","city_code":36},"address":"\u7518\u8083\u7701\u5170\u5dde\u5e02","point":{"y":"4284074.36","x":"11557683.25"}},"status":0}
            Map<String, Object> objb =(Map<String, Object>) JSON.parse(result);
            if(objb!=null&&"0".equals(String.valueOf(objb.get("status")))){
                map.put("status", "0");
                Map objd= (Map)objb.get("content");
                Map<String, String> detail=(Map<String, String>) objd.get("address_detail");
                map.put("nation", "中国");
                map.put("provice", detail.get("province"));
                map.put("city", detail.get("city"));
                map.put("isp", "");
                map.put("cityCode", "-1");
                map.put("proviceCode", "-1");
            }
            break;
            
        case "gaode":
            //{"status":"1","info":"OK","infocode":"10000","province":"甘肃省","city":"兰州市","adcode":"620100","rectangle":"103.48207,35.95046134;104.0445292,36.22263808"}
            Map<String, Object> objg =(Map<String, Object>) JSON.parse(result);
            if(objg!=null&&"1".equals(String.valueOf(objg.get("status")))){
                map.put("status", "0");
                
                map.put("nation", "中国");
                map.put("provice", String.valueOf(objg.get("province")));
                map.put("city", String.valueOf(objg.get("city")));
                map.put("isp", "");
                map.put("cityCode", String.valueOf(objg.get("adcode")));
                map.put("proviceCode", String.valueOf(objg.get("adcode")).substring(0,2)+"0000");
            }
            break;
            
        case "qqmap":
            //{"status":0,"message":"query ok","result":{"ip":"42.91.5.62","location":{"lat":36.10396,"lng":103.71878},"ad_info":{"nation":"中国","province":"甘肃省","city":"兰州市","district":"安宁区","adcode":620105}}}
            Map<String, Object> objq =(Map<String, Object>) JSON.parse(result);
            if(objq!=null&&"0".equals(String.valueOf(objq.get("status")))){
                map.put("status", "0");
                Map objd= (Map)objq.get("result");
                Map<String, String> detail=(Map<String, String>) objd.get("ad_info");
                map.put("nation", "中国");
                map.put("provice", detail.get("province"));
                map.put("city", detail.get("city"));
                map.put("isp", "");
                map.put("cityCode",detail.get("adcode"));
                map.put("proviceCode", detail.get("adcode").substring(0,2)+"0000");
            }
            break;
            
        default:
            map.put("status", "error");
            map.put("msg", "result error");
            break;
        }
        
        
        return map;
    }


@Service
public class IPGPSService {public static final String taobao="http://ip.taobao.com/service/getIpInfo.php?ip=";public static final String sina="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=";public static final String M126="http://ip.ws.126.net/ipquery?ip=";public static final String baidu="http://api.map.baidu.com/location/ip?ak=F45*******&ip=";public static final String gaode="http://restapi.amap.com/v3/ip?key=c7a9a********&ip=";public static final String qqmap="http://apis.map.qq.com/ws/location/v1/ip?key=WX***********&ip=";//对应的ak/key需要到对应的网站去申请 如:高德 http://lbs.amap.com/api/webservice/guide/api/ipconfig public Map<String, String> getIpLocation(String ip){Map<String, String> retMap=new HashMap<String, String>();boolean right=true;ArrayList<Future<Map<String, String>>> results = new ArrayList<Future<Map<String, String>>>() ;//ExecutorService service=null;try {service = Executors.newFixedThreadPool(2);results.add(service.submit(new IPLocationTask("1", "taobao", taobao+ip)));results.add(service.submit(new IPLocationTask("2", "gaode", gaode+ip)));results.add(service.submit(new IPLocationTask("3", "qqmap", qqmap+ip)));do {Iterator<Future<Map<String, String>>> iterator = results.iterator();while(iterator.hasNext()){Future<Map<String, String>> future= iterator.next();if(future.isDone()){try {retMap=future.get();} catch (Exception e) {}if(retMap!=null&&"0".equals(retMap.get("status"))){right=false;break;}else{iterator.remove(); //失败的移除掉}}if(results.size()==0){right=false; //全是失败的结果retMap.put("status", "error");retMap.put("status", "all faid");}}if(results.size()<1){break;}} while (right);} catch (Exception e) {e.printStackTrace();}finally{service.shutdown();service=null;} return retMap;}public static void main(String[] args) {Map<String, String> ret = new IPGPSService().getIpLocation("42.91.160.188");System.out.println("ret"+ret);for (String key : ret.keySet()) {System.out.println(key+"=="+ret.get(key));}/*for (int i = 0; i < 5; i++) {long t=System.currentTimeMillis();System.out.println(i+"costtime:"+ );System.out.println((System.currentTimeMillis()-t));}*/}
}@Controller
public class WebServiceController {
@AutowiredIPGPSService iPGPSService;
@RequestMapping(value = "/public/ipquery/getIpInfo")public void getIpInfo(String ip,HttpServletRequest request,HttpServletResponse response) {//如果ip为空,获取当前登陆的ipString cip=IPUtil.getClientIpAddr(request);if(StringUtils.isEmpty(ip)){ip=cip;}Map<String,String> resultMap=null;try {if(StringUtils.isEmpty(ip)){throw new Exception();}resultMap=iPGPSService.getIpLocation(ip);resultMap.put("cip", ip);} catch (Exception e) {resultMap=new HashMap<String, String>();resultMap.put("status", "0");  //失败后默认至兰州resultMap.put("nation", "中国");resultMap.put("provice", "甘肃省");resultMap.put("city", "兰州市");resultMap.put("isp", "");resultMap.put("cityCode","620100");resultMap.put("proviceCode", "620000");resultMap.put("type", "default");}String callback=request.getParameter("callback");String retStr=JSON.toJSONString(resultMap);if(StringUtils.isNotBlank(callback)){retStr=callback+"("+retStr+")";}try {ResponseUtil.write(response, retStr);} catch (Exception e) {e.printStackTrace();}}

js:客户端调用java后台

<script type="text/javascript">$(function(){var ipServer = "localhost:8080/projectweb";$.ajax({url:ipServer+"/public/ipquery/getIpInfo?callback=?",async :false,dataType:"jsonp",type:'get',success:function(data){console.log(data)},error:function(XMLHttpRequest, textStatus, errorThrown) {console.log(XMLHttpRequest.status);console.log(XMLHttpRequest.readyState);console.log(textStatus);}});}
</script>

data 的内容:

{"nation":"中国","city":"兰州","cityCode":"620100","provice":"甘肃","isp":"电信","proviceCode":"620000","type":"taobao","status":"0"}

2.根据搜狐提供的API获取当前的地区:

<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>

调用该API返回值为:

var returnCitySN = {"cip": "42.91.160.**", "cid": "620000", "cname": "甘肃省"};
$(document).ready(function(){var areaCode = returnCitySN["cid"]; //地区编码var thisIp =  returnCitySN["cip"];  //IPvar areaName = returnCitySN["cname"]; //只能获取到省}

1.根据新浪提供的API获取:

<script src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"></script>

调用该API 返回值:

 var remote_ip_info = {"ret":1,"start":-1,"end":-1,"country":"\u4e2d\u56fd","province":"\u7518\u8083","city":"\u5170\u5dde","district":"","isp":"","type":"","desc":""};
$(document).ready(function(){    alert("当前地区"+remote_ip_info["province"]+"省"+remote_ip_info["city"]+"市"+remote_ip_info["district"]+"区");
}

注:新浪的暂时不能用了,请大家参考搜狐的或阿里巴巴的

js根据IP地址获取当前的省市相关推荐

  1. 前端获取自己所在的ip_前端使用js根据ip地址获取城市地理位置

    标签: 前端使用js根据ip地址获取城市地理位置 一.使用js根据ip获取地址位置 1.在html页面,加入如下代码: var cityCode=returnCitySN.cid; document. ...

  2. js通过IP地址获取所在城市

    话不多说,直接贴代码! 将这段代码运行一下就OK了: <html xmlns="http://www.w3.org/1999/xhtml"> <head runa ...

  3. js根据ip地址获取省份城市的方法

    今天发现新浪的IP地址查询接口已经访问不了,也就是说不能用了,然后重新试了其他的,找到搜狐的ip地址可以用 不能用 新浪的IP地址查询接口 http://int.dpool.sina.com.cn/i ...

  4. js根据ip地址获取城市地理位置

    <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> <script> va ...

  5. 【Java】根据IP地址获取省市

    最近要做一个埋点的功能,需求里要求记录用户登录的IP和地点,打算利用ip2region.db实现 首先下载ip2region.db 地址:下载地址 ip2region是一套准确率99.9%的ip地址定 ...

  6. php ip 城市,php如何根据IP地址获取所在城市

    本文主要和大家分享php如何根据IP地址获取所在城市,本文主要以代码的形式,希望能帮助到大家.<?php header('Content-Type:text/html;Charset=utf-8 ...

  7. C# 网络编程之通过ip地址获取地理位置(补充)

    前面我写过一篇文章"C# 网络编程之获取本机名.ip地址.域名.物理位置"里面可以根据输入的网址根据其ip地址获取器物理位置,其中该部分主要代码是通过有道网提供的在线第三方接口实现 ...

  8. Python根据IP地址获取MAC地址

    Python3根据IP地址获取MAC地址(不能获取本机IP,可以获取与本机同局域网设备IP的MAC) main.py #!/usr/bin/env python3 # -*- coding: utf- ...

  9. JAVA程序 通过IP地址 获取MAC地址

    转载自:https://blog.csdn.net/chwshuang/article/details/46958719 叙述 我们都知道通过在电脑上敲 cmd 后,输入ipconfig -all 来 ...

最新文章

  1. 比特币核心(BCE)或许并没有你想象的强大
  2. ASP.NET-后台cookie与前台JQUERY解析cookie
  3. jenkins构建后脚本不执行_接口管理工具ApiPost-预(后)执行脚本常用方法集合
  4. eclipse支持html,让eclipse完全支持HTML/JS/CSS智能提示
  5. python requests 乱码_python3 requests 抓取乱码问题
  6. nginx 配置https_nginx 配置https
  7. hibernate面试问题_Hibernate面试问答
  8. 《我们不一样》β冲刺_3
  9. c语言冒泡排序法代码
  10. 智能家居语音控制系统项目毕业答辩
  11. java8方法引用-调用特定方法的Lambda的一种快捷写法
  12. TASK SCHEDULE(任务计划)服务无法运行 解决方案
  13. Java基础语法96-Java91011新特性
  14. 汉诺塔C语言递归实现
  15. 当厌氧菌遇见氧气之后,氧毒性、耐受性和防御性机制
  16. 信息收集-CMS识别
  17. 全国地区车牌字母对应的地区
  18. 第八周 项目5-计数的模式匹配
  19. Linux搭建LDAP Account Manager(LAM)
  20. 计算机学院教学管理ER图,教学管理系统数据库ER图和SQL语句.doc

热门文章

  1. 最便宜的方式学习阿里云产品之使用竞价式实例ECS
  2. 机器学习算法——手动搭建决策树分类器(代码+作图)
  3. 惠普暗影精灵Plus 3代 (OMEN 17-an014TX)参数
  4. 开源库3dTagCloudAndroid使用,实现3D球形云标签tag效果
  5. Android 模仿淘宝历史记录,记录存在手机内
  6. java里arraylist删除节点方法_Java之——删除ArrayList中的反复元素的2种方法
  7. WebDay05 JQuery框架
  8. AM335x 如何修改phy及双网络使用说明(精华!!!)
  9. 校园共享单车停放问题的调研
  10. Java学习 --- 类与对象