在 Python 中使用 Watch-IP
watch-ip-sdk(PyPI,v0.1.1)基于 Python 标准库中的 urllib,将 GET /v1/geo 封装进一个无依赖的客户端中。它不覆盖 IP 查询——下方的批量指南会改为直接调用该端点。
安装
需要 Python 3.9 及以上版本。没有第三方依赖——该软件包使用标准库中的 urllib。
pip
pip install watch-ip-sdk快速开始
GET /v1/geo 设计为由访问者自己的浏览器调用。从 Python 中调用它,意味着改由您自己的服务器发起调用,因此该请求不会携带浏览器自动发送的 Origin 请求头——请显式传入 origin,并将其设置为该密钥允许来源之一,否则 API 会以 origin_not_allowed 拒绝该调用。
Python
from watch_ip import WatchIP
client = WatchIP("wip_pub_xxxxxxxx", origin="https://example.com")
geo = client.get_geo()
print(geo["country"], geo["city"], geo["timezone"])错误处理与超时
每一次失败都会抛出一个带有 status 与稳定 code 的 WatchIPError。get_geo() 接受一个可选的以秒为单位的 timeout 参数(默认值为 10.0)。
Python
from watch_ip import WatchIP, WatchIPError
client = WatchIP("wip_pub_xxxxxxxx", origin="https://example.com")
try:
geo = client.get_geo(timeout=5.0)
except WatchIPError as err:
print(err.code, err.status, err)IP 查询与批量查询:请直接使用 HTTP
该 SDK 没有针对 GET /v1/lookup/{ip} 或 POST /v1/lookup 的方法——两者都是使用私密密钥(而非该软件包所封装的公开可用密钥)进行身份验证的服务器到服务器端点。请直接使用 urllib 调用它们;Python 批量指南在此基础上构建了一个完整的分块示例。
Python
import json
import urllib.request
request = urllib.request.Request(
"https://api.watch-ip.com/v1/lookup",
data=json.dumps({"ips": ["203.0.113.1", "2001:db8::1"]}).encode(),
headers={
"Authorization": "Bearer YOUR_SECRET_KEY",
"Content-Type": "application/json",
},
)
with urllib.request.urlopen(request) as response:
result = json.load(response)