技术博客
获取外网IP:5 分钟从注册到拿到第一条公网 IP 与归属地

获取外网IP:5 分钟从注册到拿到第一条公网 IP 与归属地

作者: 万维易源
2026-09-02
获取外网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)