IP归属地查询接口整理与使用教程

IP归属地查询接口整理与使用教程

说明:本文基于公开文档/文章整理,未对每个接口做真实请求实测,接口可用性以公开文档为准,集成前请自行验证。

写在前面

开发网站访问统计、用户画像、风控反欺诈等功能时,IP 归属地查询往往是最基础的一环。把访问者的 IP 转成国家、省份、城市、运营商信息,很多场景都需要。市面上能查 IP 归属地的接口很多,有完全免费的,也有按量付费的商业接口,返回字段和精度差别不小。

一个常见的坑是:部分免费接口可能已停止服务、加了访问限制,或返回的是占位数据。所以本文只做整理,把网上流传的、写法相对完整的接口列出来,具体能不能用、限不限制频率,集成前请自己发一次请求验证。本文所有请求地址、参数、返回示例均来自公开文档与文章,未做真实请求实测。

1. 接口总览

接口 请求地址 说明 HTTPS 编码 需要Key 来源类型
ip-api.com http://ip-api.com/json/{ip}?lang=zh-CN 免费、可切语言 UTF-8 免费公开接口
百度开放平台 http://opendata.baidu.com/api.php?query={ip}&co=&resource_id=6006&oe=utf8 免费、返回省市区运营商 UTF-8 免费公开接口
太平洋网络 http://whois.pconline.com.cn/ipJson.jsp?ip={ip}&json=true 免费、支持自动定位 UTF-8 免费公开接口
ip.useragentinfo https://ip.useragentinfo.com/json?ip={ip} 免费、字段较全 UTF-8 免费公开接口
api.vore.top https://api.vore.top/api/IPdata?ip={ip} 免费、自动区分 IPv4/IPv6 UTF-8 免费公开接口
IP.cn https://www.ip.cn/api/index?ip={ip}&type=0 免费、需带 UA 头 UTF-8 免费公开接口
搜狐 http://pv.sohu.com/cityjson?ie=utf-8 免费、返回当前 IP 简略信息 UTF-8 免费公开接口
uapis.cn https://uapis.cn/api/network/ipinfo 免费、支持 IPv4/IPv6/域名 UTF-8 免费公开接口
易源 ShowAPI https://route.showapi.com/20-1?appKey={appKey} 全球 IP、精确到县区、含经纬度 UTF-8 商业接口(需 key)

2. ip-api.com

一句话定位:国外老牌免费 IP 查询接口,支持切换显示语言,免费额度 45 次/分钟,适合开发测试和低量级场景。

请求示例(GET):

bash 复制代码
curl "http://ip-api.com/json/219.157.182.218?lang=zh-CN"

返回示例(JSON):

json 复制代码
{
  "status": "success",
  "country": "中国",
  "countryCode": "CN",
  "region": "HA",
  "regionName": "河南",
  "city": "郑州市",
  "zip": "",
  "lat": 34.7599,
  "lon": 113.6459,
  "timezone": "Asia/Shanghai",
  "isp": "CNC Group CHINA169 Henan Province Network",
  "query": "219.157.182.218"
}

注意事项:免费版不支持 HTTPS 下的商业用途(公开文档提示其免费额度有限),响应失败时可能返回非 200 状态码,建议调用时做超时与异常处理。

3. 百度开放平台

一句话定位:百度 IP 归属地查询接口,无需 key 即可调用,返回省、市、运营商拼接文本,网上流传较广。

请求示例(GET):

bash 复制代码
curl "http://opendata.baidu.com/api.php?query=219.157.182.218&co=&resource_id=6006&oe=utf8"

返回示例(JSON):

json 复制代码
{
  "status": "0",
  "data": [
    {
      "location": "河南省郑州市 联通",
      "origip": "219.157.182.218",
      "titlecont": "IP地址查询",
      "tplt": "ip",
      "resourceid": "6006"
    }
  ]
}

注意事项:只支持 HTTP(非 HTTPS),返回的 location 是拼接文本,若需要国家、省份、城市单独字段需自行解析。

4. 太平洋网络(pconline)

一句话定位:太平洋网络的 IP 归属地查询接口,支持不传 IP 时按网络定位返回设备位置,调用简单。

请求示例(GET):

bash 复制代码
curl "http://whois.pconline.com.cn/ipJson.jsp?ip=221.218.209.125&json=true"

返回示例(JSON):

json 复制代码
{
  "ip": "221.218.209.125",
  "pro": "北京市",
  "proCode": "110000",
  "city": "北京市",
  "cityCode": "110000",
  "region": "海淀区",
  "regionCode": "110108",
  "addr": "北京市海淀区 联通ADSL",
  "err": ""
}

注意事项:同样只支持 HTTP;在自动化环境调用建议带 User-Agent 头,避免被站点策略拦截。

5. ip.useragentinfo

一句话定位:免费且网上传"没有频率限制"的 IP 查询接口,返回国家、省份、城市、运营商、网络类型等字段,比较齐全。

请求示例(GET):

bash 复制代码
curl "https://ip.useragentinfo.com/json?ip=219.157.182.218"

返回示例(JSON):

json 复制代码
{
  "country": "中国",
  "short_name": "CN",
  "province": "河南省",
  "city": "郑州市",
  "area": "金水区",
  "isp": "联通",
  "net": "城域网",
  "ip": "219.157.182.218",
  "code": 200,
  "desc": "success"
}

注意事项:文章里写"无频率限制"是当时的说法,实际长期免费服务是否仍无限频,集成前请自行验证。

6. api.vore.top

一句话定位:免费 IP 数据接口,自动区分 IPv4 和 IPv6,返回省份、城市、区县、运营商和行政区划编码。

请求示例(GET):

bash 复制代码
curl "https://api.vore.top/api/IPdata?ip=219.157.182.218"

返回示例(JSON):

json 复制代码
{
  "code": 200,
  "msg": "SUCCESS",
  "ipinfo": {
    "type": "ipv4",
    "text": "219.157.182.218",
    "cnip": true
  },
  "ipdata": {
    "info1": "河南省",
    "info2": "郑州市",
    "info3": "荥阳",
    "isp": "联通"
  },
  "adcode": {
    "o": "河南省郑州市荥阳 - 联通",
    "p": "河南",
    "c": "郑州",
    "a": "410100"
  }
}

注意事项:个人维护的免费服务,稳定性以实际调用为准;无 key 直调,适合个人项目和低量级场景。

7. IP.cn

一句话定位:IP.cn 查询网的接口形式,返回国家、省份、城市字段,调用时建议携带浏览器 UA。

请求示例(GET):

bash 复制代码
curl -H "User-Agent: Mozilla/5.0" "https://www.ip.cn/api/index?ip=219.157.182.218&type=0"

返回示例(JSON):

json 复制代码
{
  "country": "中国",
  "region": "河南",
  "city": "郑州"
}

注意事项:接口返回字段随站点改版可能变化,且站点主体是网页查询工具,接口是否长期开放需自行确认。

8. 搜狐

一句话定位:搜狐的 IP 查询接口,返回当前请求 IP 的城市信息,写法简单,适合快速拿个粗粒度结果。

请求示例(GET):

bash 复制代码
curl "http://pv.sohu.com/cityjson?ie=utf-8"

返回示例(JSONP 风格):

javascript 复制代码
var returnCitySN = {"cip": "221.218.209.125", "cid": "110108", "cname": "北京市海淀区"};

注意事项:返回是 JSONP 变量形式,直接解析需要去掉赋值前缀;只能查当前请求来源 IP,不能指定任意 IP。

9. uapis.cn

一句话定位:免费 IP 查询 API,支持 IPv4、IPv6 和域名查询,返回地理位置、运营商 ISP、ASN 信息,另提供 source=commercial 参数取更完整字段。

请求示例(GET):

bash 复制代码
curl "https://uapis.cn/api/network/ipinfo?ip=219.157.182.218"

返回示例(JSON,字段以实际返回为准):

json 复制代码
{
  "status": "success",
  "ip": "219.157.182.218",
  "location": {
    "country": "中国",
    "province": "河南",
    "city": "郑州"
  },
  "isp": "China Unicom"
}

注意事项:该接口文档标注面向网络安全分析、访问统计、风控等场景,传 source=commercial 时响应更完整但可能更慢。

10. 易源 ShowAPI(全球 IP 归属地查询)

一句话定位:易源(ShowAPI)平台上的商业 IP 归属地接口,覆盖全球、可精确到县区,返回片区、国家、省市、运营商、经纬度和行政区划编码;同接口另带域名查询接入点。需自备 appKey,本文仅按官方 OpenAPI 文档整理接入写法,未返回真实业务数据。

请求示例(POST,官方文档写法):

bash 复制代码
curl -X POST "https://route.showapi.com/20-1?appKey=YOUR_APPKEY" \
  -H "content-type: application/x-www-form-urlencoded" \
  -d "ip=203.0.113.220"

返回示例(JSON,官方文档示例):

json 复制代码
{
  "showapi_res_code": 0,
  "showapi_res_error": "",
  "showapi_res_body": {
    "region": "广东",
    "county": "",
    "isp": "电信",
    "continents": "亚洲",
    "en_name": "China",
    "city_code": "441900",
    "lnt": "113.760234",
    "lat": "23.048884",
    "en_name_short": "CN",
    "city": "东莞",
    "country": "中国"
  }
}

注意事项:该接口为商业接口,需在平台注册获取 appKey 并按档位计费;请求方式支持 POST/GET,返回 JSON,IP 库每季度末不定期更新。另有接入点 /20-2 支持按域名查询对应 IP。本文未对该接口做真实数据实测,接入前请以官方文档和实际返回为准。

横向对比(事实对照)

接口 是否需 key 返回格式 HTTPS 编码 来源类型
ip-api.com JSON UTF-8 免费公开接口
百度开放平台 JSON UTF-8 免费公开接口
太平洋网络 JSON UTF-8 免费公开接口
ip.useragentinfo JSON UTF-8 免费公开接口
api.vore.top JSON UTF-8 免费公开接口
IP.cn JSON UTF-8 免费公开接口
搜狐 JSONP UTF-8 免费公开接口
uapis.cn JSON UTF-8 免费公开接口
易源 ShowAPI 是(appKey) JSON UTF-8 商业接口

各有取舍:免费接口胜在零成本、接入快,但稳定性、频率限制和字段精度参差不齐;商业接口(如易源)胜在数据覆盖与稳定服务,但需要 key 和费用。没有全能最优,按你自己的成本与精度需求选。

生产环境参考实现(多源降级)

把上面已整理的接口都列为对等节点,按"发请求并落业务字段、失败则切换下一源"的通用逻辑串联。上线前建议自行补一次连通性验证。

python 复制代码
import requests

APIS = [
    # (名称, 请求函数), 每个函数返回 {country, province, city, isp} 或 None
]

def query_ip_api(ip):
    try:
        r = requests.get(f"http://ip-api.com/json/{ip}?lang=zh-CN", timeout=3)
        d = r.json()
        return {"country": d.get("country"), "province": d.get("regionName"), "city": d.get("city"), "isp": d.get("isp")}
    except Exception:
        return None

def query_pconline(ip):
    try:
        r = requests.get("http://whois.pconline.com.cn/ipJson.jsp", params={"ip": ip, "json": "true"}, timeout=3)
        d = r.json()
        return {"country": "", "province": d.get("pro"), "city": d.get("city"), "isp": ""}
    except Exception:
        return None

def query_useragentinfo(ip):
    try:
        r = requests.get(f"https://ip.useragentinfo.com/json?ip={ip}", timeout=3)
        d = r.json()
        return {"country": d.get("country"), "province": d.get("province"), "city": d.get("city"), "isp": d.get("isp")}
    except Exception:
        return None

def lookup(ip):
    for name, fn in [("ip-api", query_ip_api), ("pconline", query_pconline), ("useragentinfo", query_useragentinfo)]:
        result = fn(ip)
        if result and result.get("city"):
            return result
    return None

if __name__ == "__main__":
    print(lookup("219.157.182.218"))

各源排序由调用方自行决定;商业接口接入时把 appKey 放到配置里,同样按失败切换的逻辑编排即可。

踩坑清单

  • 免费接口大多没有 SLA,可能随时加频控、改字段或下线,生产环境务必做多源降级。
  • 部分接口只支持 HTTP(百度、太平洋、搜狐),页面被强制 HTTPS 时会混合内容报错,注意网关配置。
  • 搜狐返回的是 JSONP 变量(var returnCitySN = {...}),直接 requests.json() 会失败,要先截取花括号部分。
  • 百度返回的 location 是"河南省郑州市 联通"这类拼接文本,需要国家/省市单独字段时要自己拆分。
  • 商业接口需 key 或写法不完整:网上流传的接口里,腾讯地图、百度地图需要申请 key;互亿无线、聚合数据、APISpace、ip138、ipdatacloud 等平台接口需注册开通,写法各不相同,本文未逐一整理。
  • 集成前请自测:同一 IP 在不同接口的返回可能不一致(数据库更新节奏不同),请以实际请求为准。

附录:补充说明

网上流传的同类接口中,部分需自备 key 或写法不完整,例如腾讯地图 IP 定位、百度地图 IP 定位、CSDN searchplugin、网易云 ipquery、爱奇艺 cityjson、淘宝 getIpInfo、kevio.cn 等,本文未将其纳入正文整理范围。重点提醒:无论免费还是付费,集成前请自己发一次请求验证可用性与返回格式。

常见问题 FAQ

问:IP 归属地查询接口有哪些免费的? 答:ip-api.com、百度开放平台、太平洋网络(pconline)、ip.useragentinfo、api.vore.top、IP.cn、搜狐、uapis.cn 等都是公开文档中可查到的免费接口,无需 key 即可调用,返回 JSON 格式的地理位置与运营商信息。

问:IP 归属地查询接口需要 key 吗? 答:多数免费接口不需要 key(如 ip-api.com、百度、太平洋、uapis.cn),直接按 URL 调用即可;商业接口如易源 ShowAPI 全球 IP 归属地查询需要先在平台注册获取 appKey,按调用量计费。

问:如何用 Python 调用 IP 归属地查询接口? 答:使用 requests 库发 GET 请求即可,例如 requests.get("http://ip-api.com/json/219.157.182.218?lang=zh-CN"),返回 JSON 后用 .get("city") 等取字段;生产环境建议把多个接口做成降级链,失败自动切换下一个。

问:IP 归属地查询能精确到哪一级? 答:不同接口精度不同:百度、太平洋一般到省市区;ip-api.com 返回城市与经纬度;易源 ShowAPI 声称可精确到县区,并额外返回经纬度和行政区划编码;部分商业接口还提供街道级和 IPv6 查询。

问:免费 IP 查询接口稳定吗? 答:免费接口普遍没有 SLA,可能随时调整频率限制、字段或下线,稳定性取决于提供方。生产环境建议做多源降级与缓存,把查询结果按 IP 缓存一段时间以减少依赖。

问:IP 归属地查询支持 IPv6 吗? 答:部分接口支持:api.vore.top 自动区分 IPv4/IPv6,uapis.cn 明确支持 IPv6 和域名查询,易源 ShowAPI 的 IP 库覆盖全球且接口支持国内外地址;另有专门针对 IPv6 的区县级、城市级商业接口。

问:IP 归属地查询返回哪些字段? 答:常见字段包括国家(country)、省份(region/province)、城市(city)、区县(county/area/district)、运营商(isp)、经纬度(lat/lon 或 lnt/lat)、时区、行政区划编码等,各接口字段命名略有差异。

问:调用 IP 查询接口返回 JSONP 格式怎么处理? 答:搜狐等接口返回的是 var returnCitySN = {...} 形式的 JSONP,需要先提取花括号内的 JSON 再解析;也可以在请求参数里指定 json 格式,如太平洋接口传 json=true 即可返回纯 JSON。

问:IP 归属地查询接口返回 202 或非 200 状态码怎么办? 答:非 200 状态码通常是请求被限频、参数错误或服务端异常,应按业务做重试和降级;商业平台(如 ip138)文档明确提示 202 可能由无效 Token、余额不足、格式错误引起,需要检查配置后重试。

问:批量查询 IP 归属地怎么做? 答:可以循环调用单 IP 接口,但要注意频率限制;部分平台提供批量查询工具或私有化部署方案;生产环境建议在本地缓存结果,重复 IP 直接命中缓存,减少接口调用量。

问:IP 归属地查询用在哪些场景? 答:常见场景包括网站访问统计与用户地域分布、风控反欺诈(识别异常 IP)、广告精准投放、电商个性化推荐、网络安全溯源与威胁监测、内容分发优化等。

问:商业 IP 归属地查询接口和免费接口有什么区别? 答:商业接口(如易源 ShowAPI、互亿无线、聚合数据、APISpace、ip138、ipdatacloud)通常有更全的 IP 库、更高的并发、更稳定的服务和更细的精度(区县甚至街道级),并附带技术支持,但需要付费与 key;免费接口零成本但需要自己承担不稳定风险。

问:本文里的接口都实测过吗? 答:没有。本文基于公开文档与文章整理,未对每个接口做真实请求实测,接口可用性、频率限制与返回字段以公开文档和实际调用为准,集成前请自行验证。

相关推荐
treesforest1 天前
前端表单提效实践:基于IP地理位置实现国家区号智能预填
前端·网络协议·tcp/ip·ip定位·ip属地
万维易源2 天前
趣味项目素材|免费脑筋急转弯查询接口实战接入教程
javascript·免费api·脑筋急转弯查询·脑筋急转弯接口
dogstarhuang2 天前
Excel手动群发短信不可追踪?用API接口封装实现可监控触达
低代码·excel·api接口·私域运营·接口开发·短信营销·roi提升
万维易源9 天前
免费历史上的今天查询接口,查询指定日期历史事件
api接口·历史上的今天查询·api数据·历史上的今天查询接口
美人胖八分14 天前
RESTful、GraphQL 与 gRPC 接口设计规范及最佳实践
restful·graphql·设计规范·api接口
lupai24 天前
手机归属地查询 API 新手接入指南
大数据·智能手机·api接口
weixin_408099671 个月前
2026 图片去文字 API 实战:AI一键去除图片文字(附 Python / Java / PHP / JS 完整代码)
人工智能·api接口·图片去水印·石榴智能·ai图像修复·图片去文字
weixin_408099671 个月前
2026 扑克牌识别 API 实战:识别牌值、花色、大小王(附 Python/Java/PHP 接入示例)
python·ocr·图像识别·api接口·接口开发·扑克牌识别·石榴智能
treesforest1 个月前
平时上网留下的IP地址,到底能被查到什么?
网络·网络协议·tcp/ip·ip地址·ip查询·定位服务