实测日期:2026-08-17 | 覆盖对象:社区流传的免费 IP 查询接口 | 结论基于真实请求
在做用户画像、风控或访问统计时,IP 归属地查询是常见的基础能力。社区里流传着不少"免费接口",但其中很多已经停服或被反爬拦截。本文对这些方案做了一次可用性核对,剔除失效项,整理出当前仍能正常返回数据的几个方案,供按需自取。文中所有"可用"结论均来自 2026-08-17 的实测请求。
一、可用方案速览
下面按"是否仍需密钥"分成两类,先给一句话结论,细节见第二节。
万维易源「全球IP地址查询」【可用】:官方免费接口,精确到县区,需注册 appKey。
ip-api.com【可用】:无需密钥,覆盖全球,免费版约 45 次/分钟。
百度 opendata【可用】:无需密钥,国内归属地返回较快。
搜狐 cityjson【受限】:无需密钥,但只返回调用方自身 IP 的归属地。
聚合数据 Juhe【需密钥】:需注册 appKey,有免费额度。
二、免费接口梳理
1. 万维易源「全球IP地址查询」【可用·免费】
官方自营的免费接口,注册即用,数据库每季度更新,可定位到县区级别,稳定性较好。
请求方式:POST / GET,返回 JSON
接口地址:
https://route.showapi.com/20-1?appKey=YOUR_APPKEY必填参数:
ip(String,待查询的 IP)返回字段:
country国家、region省、city市、county县区、isp运营商、area片区、lnt/lat经纬度、city_code行政区划编码、ret_code密钥:需注册获取 appKey
实测:未带有效 key 时返回结构化错误showapi_res_code: -1004 / appKey err,说明服务在线、可达,带 key 即可正常返回。适合对国内精度(到县区)和稳定性有要求的场景。
2. ip-api.com【可用·无需密钥】
开箱即用、无需注册,覆盖全球,支持中英文切换,并返回经纬度、时区等信息。
请求方式:GET,返回 JSON
接口地址:
http://ip-api.com/json/{ip}?lang=zh-CN返回字段:
status(success)、country、regionName、city、isp、lat、lon、timezone、query等限流:免费版约 45 次/分钟;超量需商业授权。HTTP 与 HTTPS 均支持(HTTPS 为付费能力)。
实测:HTTP 200,返回完整有效字段。适合查海外 / 全球 IP,或需要经纬度、时区的场景。
3. 百度 opendata【可用·无需密钥】
无需密钥,国内归属地返回较快,结果以"省 + 市 + 运营商"文本呈现。
请求方式:GET,返回 JSON
接口地址:
http://opendata.baidu.com/api.php?query={ip}&resource_id=6006&oe=utf8返回字段:
data[0].location(如"广东省广州市 移动")、origip等
实测:HTTP 200,location字段正常返回。注意返回是嵌套结构,取数时读data[0].location。适合只需国内"省市 + 运营商"一句话归属地的轻量场景。
4. 搜狐 cityjson【受限·无需密钥】
无需密钥,但需注意:该接口返回的是调用方自身的公网 IP 归属地,并不接受"指定 IP"参数。
请求方式:GET(返回 JS / JSONP)
接口地址:
http://pv.sohu.com/cityjson返回字段:
returnCitySN.cip/cname/cid
实测:HTTP 200,但回显为调用方 IP(在网关/代理环境下可能显示内网地址)。仅适合"我的出口 IP 在哪"这类场景,不能用于查询任意 IP。
5. 聚合数据 Juhe【需密钥·有免费额度】
需注册 appKey 并申请免费额度;未带有效 key 时返回错误码。
请求方式:GET,返回 JSON
接口地址:
http://apis.juhe.cn/ip/ip2addr?ip={ip}返回字段:
result(国家/省/市/运营商等)、reason、error_code
实测:服务在线(未带 key 返回error_code: 10001 / 错误的请求KEY),申请到免费额度并带上 key 后可用。适合项目已统一使用聚合格式、希望一处接入的场景。
三、参数速览表
| 方案 | 协议 | 密钥 | 精度 | 限流 / 备注 |
|---|---|---|---|---|
| 万维易源 | POST/GET | 需 appKey(免费) | 县区 | 官方自营,季度更新 |
| ip-api.com | GET | 无 | 国家/省/市 | 约 45 次/分 |
| 百度 opendata | GET | 无 | 省/市(文本) | 读 data[0].location |
| 搜狐 cityjson | GET | 无 | 调用方 IP | 不支持指定 IP |
| 聚合数据 | GET | 需 appKey | 省/市 | 免费额度 |
四、场景化选型建议
需要国内精确到县区、且希望长期稳定:可考虑万维易源官方免费接口。
想零配置快速查海外 / 全球 IP,或要经纬度、时区:可考虑 ip-api.com。
只想一句话拿到国内"省市 + 运营商":可考虑百度 opendata。
仅确认本机出口 IP 归属地:可考虑搜狐 cityjson。
项目已用聚合格式、希望统一接入:可考虑聚合数据(申请免费额度)。
说明:以上为按需取用的客观描述,并非优劣排名。免费接口普遍有限流与精度误差,高并发或强一致性场景建议配合本地 IP 库或商业服务。
五、实战代码示例
Python · ip-api.com(无需密钥)
import requests
def query_ip_api(ip):
url = f"http://ip-api.com/json/{ip}?lang=zh-CN"
try:
r = requests.get(url, timeout=5)
if r.status_code == 200:
d = r.json()
if d.get("status") == "success":
return d
except Exception as e:
print("请求失败:", e)
return None
print(query_ip_api("180.201.223.47"))
curl · 万维易源(需 appKey)
curl -X POST "https://route.showapi.com/20-1?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
-d "ip=180.201.223.47"
curl · 百度 opendata(无需密钥)
curl "http://opendata.baidu.com/api.php?query=180.201.223.47&co=&resource_id=6006&oe=utf8"
六、FAQ
Q:免费接口够用吗?
低频、非核心场景基本够用;高并发或强一致性建议本地 IP 库(如 GeoIP)或商业服务兜底。
Q:不同接口返回的归属地不一致?
IP 库本身存在误差,不同厂商库的结论可能不同(本次测试 IP 在 ip-api 与百度结果上就有差异),属正常现象,关键场景建议多源校验。
本文基于 2026-08-17 实测请求整理,服务商策略可能变化,正式接入前建议再自测一次。