注:完全免费且无使用限制的接口应该没有,下面这几个算是我见过比较好的了,免费免注册,普通使用免费额度足够了。如果有其他免费接口,欢迎补充,谢谢。
淘宝
# 请求示例(免注册,直接使用 accessKey=alibaba-inc)
https://ip.taobao.com/outGetIpInfo?ip=202.60.126.220&accessKey=alibaba-inc
# 响应示例
{
"data": {
"area": "",
"country": "中国",
"isp_id": "100026",
"queryIp": "202.60.126.220",
"city": "北京",
"ip": "202.60.126.220",
"isp": "联通",
"county": "",
"region_id": "110000",
"area_id": "",
"county_id": null,
"region": "北京",
"country_id": "CN",
"city_id": "110100"
},
"msg": "query success",
"code": 0
}
# 超限后响应示例
{
"msg": "the request over max qps for user ,the accessKey=alibaba-inc",
"code": 4
}
沃云
# 请求示例
https://api.vore.top/api/IPdata?ip=202.60.126.220
# 响应示例
{
"code": 200,
"msg": "SUCCESS",
"ipinfo": {
"type": "ipv4",
"text": "202.60.126.220",
"cnip": true
},
"ipdata": {
"info1": "北京市",
"info2": "",
"info3": "",
"isp": "电信"
},
"adcode": {
"o": "北京市 - 电信",
"p": "北京",
"c": "北京",
"n": "北京-北京",
"r": "北京-北京市区",
"a": "110100",
"i": true
},
"tips": "接口由VORE-API(https:\\/\\/api.vore.top\\/)免费提供",
"time": 1761121592
}
太平洋
# 请求示例
http://whois.pconline.com.cn/ipJson.jsp?ip=202.60.126.220&json=true
# 响应示例
{
"ip": "202.60.126.220",
"pro": "北京市",
"proCode": "110000",
"city": "北京市",
"cityCode": "110000",
"region": "",
"regionCode": "0",
"addr": "北京市 华电集团",
"regionNames": "",
"err": ""
}
http://ip9.com.cn
# 请求示例
https://ip9.com.cn/get?ip=202.60.126.220
# 响应示例
{
"ret": 200,
"data": {
"ip": "202.60.126.220",
"country": "中国",
"country_code": "cn",
"prov": "北京",
"city": "北京",
"city_code": "beijing",
"city_short_code": "bj",
"area": "",
"post_code": "100000",
"area_code": "010",
"isp": "中国电信",
"lng": "116.405285",
"lat": "39.904989",
"long_ip": 3392962268,
"big_area": "华北"
},
"qt": 0
}
http://ipapi.co
# 请求示例
https://ipapi.co/58.37.111.27/json/
# 响应示例
{
"ip": "58.37.111.27",
"network": "58.37.0.0/17",
"version": "IPv4",
"city": "Shanghai",
"region": "Shanghai",
"region_code": "SH",
"country": "CN",
"country_name": "China",
"country_code": "CN",
"country_code_iso3": "CHN",
"country_capital": "Beijing",
"country_tld": ".cn",
"continent_code": "AS",
"in_eu": false,
"postal": null,
"latitude": 31.2222,
"longitude": 121.4581,
"timezone": "Asia/Shanghai",
"utc_offset": "+0800",
"country_calling_code": "+86",
"currency": "CNY",
"currency_name": "Yuan Renminbi",
"languages": "zh-CN,yue,wuu,dta,ug,za",
"country_area": 9596960,
"country_population": 1411778724,
"asn": "AS4812",
"org": "China Telecom Group"
}
# 超限后响应示例
Too many rapid requests. Please try again in some time or contact us at https://ipapi.co/contact
http://ipapi.xxlb.org
# 请求示例
https://ipapi.xxlb.org/?ip=58.37.111.27
# 响应示例
{
"ip": "58.37.111.27",
"as": {
"number": 4812,
"name": "China Telecom Group",
"info": "中国电信"
},
"addr": "58.37.111.0/24",
"country": {
"code": "CN",
"name": "中国"
},
"registered_country": {
"code": "CN",
"name": "中国"
},
"regions": [
"上海市",
"浦东新区"
],
"regions_short": [
"上海",
"浦东新区"
],
"type": "宽带"
}
http://ipinfo.io
# 请求示例
http://ipinfo.io/58.37.111.27/json
# 响应示例
{
"ip": "58.37.111.27",
"city": "Shanghai",
"region": "Shanghai",
"country": "CN",
"loc": "31.2222,121.4581",
"org": "AS4812 China Telecom (Group)",
"postal": "200000",
"timezone": "Asia/Shanghai",
"readme": "https://ipinfo.io/missingauth"
}
本地数据库
可以基于 GeoLite2-City.mmdb 库开发一个本地接口。
# 响应示例
geoip2.models.City(['en'], continent = {
'code': 'AS',
'geoname_id': 6255147,
'names': {
'de': 'Asien',
'en': 'Asia',
'es': 'Asia',
'fr': 'Asie',
'ja': 'アジア',
'pt-BR': 'Ásia',
'ru': 'Азия',
'zh-CN': '亚洲'
}
}, country = {
'geoname_id': 1814991,
'iso_code': 'CN',
'names': {
'de': 'China',
'en': 'China',
'es': 'China',
'fr': 'Chine',
'ja': '中国',
'pt-BR': 'China',
'ru': 'Китай',
'zh-CN': '中国'
}
}, registered_country = {
'geoname_id': 1814991,
'iso_code': 'CN',
'names': {
'de': 'China',
'en': 'China',
'es': 'China',
'fr': 'Chine',
'ja': '中国',
'pt-BR': 'China',
'ru': 'Китай',
'zh-CN': '中国'
}
}, traits = {
'ip_address': '116.24.64.173',
'network': '116.24.0.0/17'
}, city = {
'geoname_id': 1795565,
'names': {
'de': 'Shenzhen',
'en': 'Shenzhen',
'es': 'Shenzhen',
'fr': 'Shenzhen',
'ja': '深セン市',
'pt-BR': 'Shenzhen',
'ru': 'Шэньчжэнь',
'zh-CN': '深圳'
}
}, location = {
'accuracy_radius': 50,
'latitude': 22.5455,
'longitude': 114.0683,
'time_zone': 'Asia/Shanghai'
}, subdivisions = [{
'geoname_id': 1809935,
'iso_code': 'GD',
'names': {
'de': 'Guangdong',
'en': 'Guangdong',
'es': 'Guangdong',
'fr': 'Province de Guangdong',
'ru': 'Гуандун',
'zh-CN': '广东'
}
}])
# 可以使用以下方式提取信息
{
'ip': ip,
'country': response.country.name,
'region': response.subdivisions[0].name if response.subdivisions else None,
'city': response.city.name,
'postal': response.postal.code,
'longitude': response.location.longitude,
'latitude': response.location.latitude
}