获取外网IP:5 分钟从注册到拿到第一条公网 IP 与归属地
获取外网IP快速接入公网IP查询Python示例免费接口 # 获取外网IP:5 分钟从注册到拿到第一条公网 IP 与归属地
> 接口:获取外网IP(apiCode 632,接入点 1) · 免费 · POST/GET · JSON · 适用:新注册用户、初级开发者 · 阅读约 5 分钟
## 核心要点
- 获取外网IP 是**免费**接口,无需任何业务参数,只要带上 AppKey 即可返回调用者的公网 IP 与归属地。
- 一行请求就能拿到 IP、省份、城市、运营商、国家与经纬度,适合登录审计、地域分析等场景。
- 下面给出 cURL / Python / 浏览器 JS 三种可直接运行的示例,替换 `YOUR_APPKEY` 即可跑通。
## Why:这跟我有什么关系
很多系统需要知道"当前访问者是从哪个公网 IP、哪个城市进来的":
- **登录安全**:发现账号在异地/境外登录,及时告警或二次验证。
- **运营分析**:统计用户都来自哪些省份、用哪家运营商,指导区域投放。
- **访问审计**:后台记录"谁在什么时候从哪来",便于溯源。
获取外网IP 把这些能力收敛成一个免费接口,省去你自建 IP 库与地理解析的麻烦。
## What:前置条件与接口速览
| 项 | 值 |
|----|----|
| 接口地址 | `https://route.showapi.com/632-1?appKey=YOUR_APPKEY` |
| 鉴权 | AppKey 放在 query 参数 `appKey` |
| 请求方式 | POST 或 GET |
| 业务参数 | 无(文档原文:调用此接口无需额外参数) |
| 返回格式 | JSON |
| 计费 | 免费,设使用档位限制,可用积分兑换更高调用档位 |
| 集成 | MCP 服务、OpenAPI 3.0 文档(YAML/JSON) |
前置条件:一个 ShowAPI 账号 + 一对 AppKey(控制台「我的应用」中创建)。
## How:第一次调用
### 方式一 · cURL
```bash
curl -X POST "https://route.showapi.com/632-1?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
--max-time 10
```
### 方式二 · Python(requests)
```python
import requests
APP_KEY = "YOUR_APPKEY" # 替换为你的真实 AppKey
try:
r = requests.post(
"https://route.showapi.com/632-1",
params={"appKey": APP_KEY},
headers={"content-type": "application/x-www-form-urlencoded"},
timeout=10,
)
r.raise_for_status()
data = r.json()
if data.get("showapi_res_code") != 0:
print("系统级错误:", data.get("showapi_res_error"))
else:
body = data["showapi_res_body"]
print("IP:", body.get("ip"))
print("归属地:", body.get("region"), body.get("city"), body.get("isp"))
except requests.RequestException as e:
print("请求失败:", e)
```
### 方式三 · 浏览器 JavaScript(前端直接拿访问者 IP)
```html
<script>
fetch("https://route.showapi.com/632-1?appKey=YOUR_APPKEY", { method: "POST" })
.then((r) => r.json())
.then((data) => {
if (data.showapi_res_code !== 0) {
console.error("系统级错误:", data.showapi_res_error);
return;
}
const b = data.showapi_res_body;
console.log("你的公网 IP:", b.ip, "来自", b.region, b.city);
})
.catch((e) => console.error("请求失败:", e));
</script>
```
> 注意:浏览器直接调用需注意跨域(CORS)。若前端报跨域,建议由你的后端转发请求,不要把 AppKey 暴露在前端代码里。
## 返回示例与解析
真实公网调用(文档示例值)返回:
```json
{
"showapi_res_code": 0,
"showapi_res_error": "",
"showapi_res_id": "ce135f6739294c63be0c021b76b6fbff",
"showapi_res_body": {
"region": "云南",
"county": "",
"isp": "移动",
"continents": "亚洲",
"en_name": "China",
"city_code": "530100",
"lnt": "102.712251",
"lat": "25.040609",
"en_name_short": "CN",
"ip": "183.225.1.165",
"city": "昆明",
"country": "中国"
}
}
```
字段含义速记:`ip` 是公网 IP;`region`/`city`/`county` 是省/市/乡镇;`isp` 是运营商;`country`/`en_name`/`en_name_short` 是国家与英文名/短码;`lnt`/`lat` 是经度/纬度;`city_code` 是城市编码。完整字段表见[返回字段全解](https://www.showapi.com/guides/getip-fields-632)。
> 实测提示:在局域网/IDC 内网环境调用,会返回 `region/city/... = "本地局域网"`、`ip` 为内网地址,这属于正常表现,详见[常见问题与边界](https://www.showapi.com/guides/getip-faq-632)。
## 进阶 / 边界
- **AppKey 不要进前端**:前端直连时 AppKey 会暴露,生产环境应由服务端持有并转发。
- **免费档位有限制**:接口免费但设使用档位防滥用,高并发请先了解[档位说明](https://www.showapi.com/free-api),必要时用积分升档。
- **错误处理**:务必判断 `showapi_res_code`(系统级)与 `showapi_res_body.ret_code`(业务内,实测存在)是否为 0,再使用数据。
## FAQ
**Q:返回 `showapi_res_code` 不是 0 怎么办?**
A:先看 `showapi_res_error` 文案。常见为 AppKey 无效或档位不足,到控制台核对 AppKey 与档位即可。
**Q:前端直接 fetch 报跨域(CORS)错误?**
A:接口的 CORS 策略可能不允许任意来源。生产建议由你的后端服务转发,避免在浏览器暴露 AppKey。
**Q:为什么我拿到的是「本地局域网」而不是真实公网 IP?**
A:说明请求是从内网/IDC 出口发出的,接口只能看到出口 IP。真实用户从公网访问你的服务时,由你的服务端调用才会拿到用户公网 IP。
**Q:这个接口收费吗?**
A:接口本身免费,注册后默认可调用;设使用档位限制,可用平台积分兑换更高档位。
## 相关能力 / 下一步阅读
- [获取外网IP:返回字段全解(IP / 经纬度 / 归属地 / 运营商)](https://www.showapi.com/guides/getip-fields-632)
- [获取外网IP:常见问题与边界(免费档位限制 / 内网·代理 / 字段缺失)](https://www.showapi.com/guides/getip-faq-632)
- **本系列共 8 篇**:查看[获取外网IP 指南总目录](https://www.showapi.com/guides/getip-guides-632)