本文共 3359 字,大约阅读时间需要 11 分钟。
以下是优化后的技术文章:
本文使用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提供的免费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获取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地址归属地获取方式。
转载地址:http://tudzz.baihongyu.com/