身分認證
在伺服器端請求的 Authorization 標頭中送出 Bearer 金鑰。
Authorization: Bearer 17nas_live_xxxxxxxxx
不要把金鑰放進瀏覽器腳本、APP 或小程式安裝包——這些都能被反編譯出來。前端需要用時,讓前端請求你自己的伺服器,由伺服器代為呼叫。可以在控制台設定 IP/CIDR 白名單進一步限制來源。
GET/v1/ip
ipapi.17nas.com
回傳本次 HTTP 連線實際使用的 IP 和通訊協定。請求走 IPv4 就回傳 IPv4,走 IPv6 就回傳 IPv6,不需要額外指定。
| 參數 | 位置 | 說明 |
Authorization | Header | 必填。Bearer <你的 API Key> |
format | Query | 選填。json(預設)或 text;text 只回傳純 IP,適合 shell 直接取值 |
# JSON(預設)
curl https://ipapi.17nas.com/v1/ip \
-H "Authorization: Bearer 17nas_live_xxx"
# 只回傳純文字 IP,適合 shell 指令碼直接取值
curl "https://ipapi.17nas.com/v1/ip?format=text" \
-H "Authorization: Bearer 17nas_live_xxx"
# 強制走 IPv4 / IPv6 查詢,用 curl 自己的參數控制
curl -4 https://ipapi.17nas.com/v1/ip -H "Authorization: Bearer 17nas_live_xxx"
curl -6 https://ipapi.17nas.com/v1/ip -H "Authorization: Bearer 17nas_live_xxx"
回應欄位
200 OK
{
"ip": "203.0.113.10",
"protocol": "IPv4",
"country": { "code": "CN" },
"region": "Guangdong",
"city": "Shenzhen",
"timezone": "Asia/Shanghai",
"asn": { "number": 4134, "organization": "CHINANET" },
"edge": { "colo": "HKG" },
"request_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"generated_at": "2026-07-26T09:00:00.000Z"
}
| 欄位 | 型別 | 說明 |
ip | string | 本次連線的公網 IP |
protocol | string | IPv4 或 IPv6 |
country.code | string | ISO 3166-1 兩位國家代碼,取不到為 null |
region / city | string | 省/州與城市,英文;精度取決於邊緣資料庫,可能為 null |
timezone | string | IANA 時區名稱,如 Asia/Shanghai |
asn.number | number | 自治系統號碼;取不到為 0 |
asn.organization | string | 電信業者名稱,可能為 null |
edge.colo | string | 處理本次請求的邊緣節點三字碼 |
request_id | string | 本次請求的唯一 ID,回報問題時帶上它 |
地理位置欄位依賴邊緣節點的 GeoIP 資料,行動網路、衛星鏈路、企業 NAT 出口和部分 Proxy 下可能不準或為空。請把這些欄位當參考而不是事實,不要用它做強制性的地域攔截。
額度回應標頭
每次成功回應都會帶上目前額度狀態,不需要額外呼叫介面去查。
| 回應標頭 | 說明 |
X-RateLimit-Limit | 每秒允許的請求數(QPS) |
X-RateLimit-Remaining | 目前這一秒還剩多少次 |
X-RateLimit-Reset | 限速視窗重置的 Unix 時間戳 |
X-Quota-Limit | 本期總額度 |
X-Quota-Used | 本期已用 |
X-Quota-Remaining | 本期剩餘 |
X-Quota-Reset | 本期額度重置時間 |
X-Request-Id | 本次請求 ID,回報問題時帶上它 |
建議在程式碼裡監控 X-Quota-Remaining,低於 10% 時告警,別等到呼叫直接失敗才發現。
錯誤狀態
401 金鑰無效、已撤銷或格式不對
403 來源 IP 不在白名單內
429 超過 QPS 限速,或本期額度耗盡
503 服務暫時不可用,稍後重試
{
"error": {
"code": "quota_exhausted",
"message": "Monthly quota exhausted",
"request_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"docs_url": "https://17nas.com/ip-api.php#documentation",
"upgrade_url": "https://17nas.com/ip-api.php?source=api-error&placement=quota-exhausted#pricing",
"reset_at": "2026-08-01T00:00:00+08:00"
}
}
429 有兩種成因,靠回應標頭區分:X-RateLimit-Remaining 為 0 是瞬時限速,等一秒就能繼續;X-Quota-Remaining 為 0 是本期額度用盡,要等到 reset_at 或者加量/升級。
重試與降級
這是一個網路請求,它一定會有失敗的時候。幾條實務建議:
- 設定 5 秒以內的逾時,不要讓它拖垮你的主流程
- 遇到
503 或逾時可以重試,用指數退避(1s、2s、4s),最多 3 次
- 遇到
401 / 403 不要重試,那是設定問題,重試只會浪費額度
- 遇到
429 且是額度耗盡,重試沒有意義,直接走降級邏輯
- 非關鍵路徑(比如日誌記錄)失敗就跳過,別因為拿不到 IP 歸屬地把使用者的正常操作擋下來
- 可以在本地快取幾分鐘——同一台伺服器的出口 IP 通常不會秒級變化