随着逐渐深入人心的互联网思维,越来越多的个人网站及公共论坛被主流搜索引擎收录。精确现IP地址归属地经纬度查询,显示请求者所属的国家/地区/城市以及所属的网络运营商ISP或者自治系统号ASN(Autonomous System Number)以此用于数据分析,成为越来越多人的需求。本文所述IP Geolocation API集成自ipify.org的免费服务,Free Plan的请求限制是每月不高于一千次,足以应付绝大多数个人业务的轻量级业务需求。
下面给出一些常用的IP归属地公共API接口:
1 2 3
| https://pv.sohu.com/cityjson?ie=utf-8 https://www.myip.com/api-docs/ https://api.myip.com
|
Javascript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script type="text/javascript"> var ip = "8.8.8.8"; var api_key = "your_api_key"; $(function () { $.ajax({ url: "https://geo.ipify.org/api/v1", dataType: "jsonp", data: {apiKey: api_key, ipAddress: ip}, success: function(data) { $("body").append("<pre>"+ JSON.stringify(data,"",2)+"</pre>"); } }); }); </script>
|
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script type="text/javascript"> var ip = "8.8.8.8"; var api_key = "your_api_key"; $(function () { $.ajax({ url: "https://geo.ipify.org/api/v1", dataType: "jsonp", data: {apiKey: api_key, ipAddress: ip}, success: function(data) { $("body").append("<pre>"+ JSON.stringify(data,"",2)+"</pre>"); } }); }); </script>
|
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class GeoipifyAPIQuery { public static void main(String[]args){ String IP = "8.8.8.8"; String API_KEY = "your_api_key"; String API_URL = "https://geo.ipify.org/api/v1?"; String url = API_URL + "&apiKey=" + API_KEY + "&ipAddress=" + IP; try (java.util.Scanner s = new java.util.Scanner(new java.net.URL(url).openStream())) { System.out.println(s.useDelimiter("\\A").next()); } catch (Exception ex) { ex.printStackTrace(); } } }
|
Python
1 2 3 4 5 6 7 8 9 10 11 12
| try: from urllib.request import urlopen except ImportError: from urllib2 import urlopen
ip = '8.8.8.8' api_key = 'your_api_key' api_url = 'https://geo.ipify.org/api/v1?'
url = api_url + 'apiKey=' + api_key + '&ipAddress=' + ip
print(urlopen(url).read().decode('utf8'))
|
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <?php /** *2020-01-30 *Twilight Summer */ header('Content-Type: text/html; charset=UTF-8'); //开启跨域Ajax支持 header('Access-Control-Allow-Origin:*'); //初始化资源文件
// $url='https://api.myip.com'; $api_url = 'https://geo.ipify.org/api/v1'; $api_key = '************'; $ip =summer_getip();
$url_total="{$api_url}?apiKey={$api_key}&ipAddress={$ip}";
$info = file_get_contents($url_total);
/** *获取当前请求IP *排除CDN干扰 */ function summer_getip(){ if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) { $ip = getenv("HTTP_CLIENT_IP"); } else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); } else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) { $ip = getenv("REMOTE_ADDR"); } else if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) { $ip = $_SERVER['REMOTE_ADDR']; } else { $ip = "unknown"; } return $ip; }
//echo $ip;
//判断输出类型 if ($encode == 'javascript' || $encode == 'js') { echo 'function getIP(){document.write("',trim($info),'");}'; } else { echo trim($info); }
|
鸣谢:PHP一个页面根据传的不同值显示不同的内容