oracle 翻译ip归属地/经纬度/定位;获取ip归属地/经纬度/定位;获取ip gps定位/lng,lat/坐标
发布日期:2021-05-08 18:38:40 浏览次数:15 分类:精选文章

本文共 3359 字,大约阅读时间需要 11 分钟。

以下是优化后的技术文章:

Oracle数据库IP地址归属地及GPS定位解决方案

目录

  • 通过pconline获取IP地址归属地
  • 通过ip-api获取IP地址归属地
  • 通过ip-api获取GPS坐标(经纬度)

  • 一、通过pconline获取IP地址归属地

    本文使用pconline提供的IP地址归属地查询服务,通过以下SQL函数实现IP地址归属地获取:

    create function get_ip_city(ip in varchar2)    return varchar2is    city  varchar2(200);    Req   Utl_Http.Req;    Resp  Utl_Http.Resp;    Value Varchar2(13767);    Urll  Varchar2(2000);    obj   json;begin    Urll := 'http://whois.pconline.com.cn/ipJson.jsp?ip=' || ip || '&json=true';    Req := Utl_Http.Begin_Request(Urll);    UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15');    Resp := Utl_Http.Get_Response(Req);    Utl_Http.READ_TEXT(Resp, Value);    Utl_Http.End_Response(Resp);    obj := json(Value);    city := '中国-' || obj.get_string('pro') || '-' || obj.get_string('city');    return city;exception    when others then        city := '获取失败';        return city;end;

    测试查询示例:

    select get_ip_city('124.64.17.191') from dual;select get_ip_city('219.136.53.255') from dual;

    二、通过ip-api获取IP地址归属地

    使用ip-api提供的免费JSON接口,实现IP地址归属地获取:

    create function get_ip_city(ip in varchar2)    return varchar2is    city  varchar2(200);    Req   Utl_Http.Req;    Resp  Utl_Http.Resp;    Value Varchar2(13767);    Urll  Varchar2(2000);    obj   json;begin    Urll := 'http://ip-api.com/json/' || ip || '?lang=zh-CN';    Req := Utl_Http.Begin_Request(Urll);    UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15');    UTL_HTTP.SET_HEADER(req, 'Accept-Language', 'zh-cn');    UTL_HTTP.SET_HEADER(req, 'Content-Type', 'application/json; charset=utf-8');    Resp := Utl_Http.Get_Response(Req);    Utl_Http.READ_RAW(Resp, Value);    Value := Utl_Raw.CAST_TO_VARCHAR2(Value);    Utl_Http.End_Response(Resp);    obj := json(Value);    city := obj.get_string('country') || '-' || obj.get_string('regionName') || '-' || obj.get_string('city');    return city;exception    when others then        city := '获取失败';        return city;end;

    测试查询示例:

    select get_ip_city('124.64.17.191') from dual;select get_ip_city('219.136.53.255') from dual;

    三、通过ip-api获取GPS坐标(经纬度)

    通过ip-api获取IP地址的GPS坐标(经纬度),适用于需要定位服务的场景:

    create function get_ip_gps(ip in varchar2)    return varchar2is    city  varchar2(200);    Req   Utl_Http.Req;    Resp  Utl_Http.Resp;    Value Varchar2(13767);    Urll  Varchar2(2000);    obj   json;begin    Urll := 'http://ip-api.com/json/' || ip || '?lang=zh-CN';    Req := Utl_Http.Begin_Request(Urll);    UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15');    UTL_HTTP.SET_HEADER(req, 'Accept-Language', 'zh-cn');    UTL_HTTP.SET_HEADER(req, 'Content-Type', 'application/json; charset=utf-8');    Resp := Utl_Http.Get_Response(Req);    Utl_Http.READ_RAW(Resp, Value);    Value := Utl_Raw.CAST_TO_VARCHAR2(Value);    Utl_Http.End_Response(Resp);    obj := json(Value);    city := obj.get_number('lon') || ',' || obj.get_number('lat');    return city;exception    when others then        city := '获取失败';        return city;end;

    测试查询示例:

    select get_ip_gps('124.64.17.191') from dual;select get_ip_gps('219.136.53.255') from dual;

    以上功能可根据实际需求进行扩展或调整,建议结合具体业务场景选择合适的IP地址归属地获取方式。

    上一篇:ORA-06502: PL/SQL: 数字或值错误
    下一篇:oracle 配置访问webservice/url 权限

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年03月21日 13时28分17秒