Watch-IP 对比 IPinfo
IPinfo 和 Watch-IP 都提供批量端点,可在一次调用中解析多个提供的 IP,但批量限制、响应格式和价格各不相同。以下信息是直接在 IPinfo 自己的网站上核实的;两个表格都不宣布总体胜出者。
本页有关 IPinfo 的信息于 2026 年 9 月 8 日在「来源」列出的页面上直接核实,可能随时变更且不另行通知 — 在依赖具体数字之前,请重新核实该服务商自己的网站。有关 Watch-IP 的信息来自本仓库自身的代码和当前的 /pricing 页面。如发现任何看起来过时的信息,请通过 /contact 反馈。
本页对比的内容
本页对比服务器端的指定 IP 查询 — IPinfo 的核心 API 及批量端点与 Watch-IP 的 GET /v1/lookup/{ip} 和 POST /v1/lookup(私密密钥,第三方地理定位数据库)。本页不对比 Watch-IP 另一款独立的浏览器访问者地理位置产品(GET /v1/geo,公开可用密钥,来源锁定),该产品在本次对比中没有对应项。
功能对比
| Watch-IP | IPinfo | |
|---|---|---|
| 身份验证 | 通过 Authorization: Bearer 请求头提供私密密钥。 | 通过 ?token= 查询参数提供令牌。IPinfo 批量增强 API 文档 · 2026-09-08 |
| 免费额度 | 查询没有免费额度。套餐起价为每月 19 美元,含 5,000 次查询。(Watch-IP 另一款独立的访问者地理位置产品有自己的免费额度,用于浏览器场景,而非任意 IP 查询。) | IPinfo Lite:每月 0 美元,说明为无限请求,但仅提供国家级地理位置,另加 50 次通过网页控制台的查询。IPinfo 价格 · 2026-09-08 |
| 最低付费套餐 | 每月 19 美元,5,000 次查询/月,每分钟 20 次请求。 | IPinfo Core:每月 26 美元,150,000 次请求/月;价格页面未按套餐详细列出速率限制。IPinfo 价格 · 2026-09-08 |
| 每次调用的批量大小 | 每次 POST /v1/lookup 调用最多 100 个 IP。 | 每次 POST /batch 调用最多 1,000 个 IP。IPinfo 批量增强 API 文档 · 2026-09-08 |
| 批量响应格式 | 一个「results」数组,顺序与提交的「ips」数组相同。 | 一个以 IP 地址为键的 JSON 对象;未记录响应顺序会被保留。IPinfo 批量增强 API 文档 · 2026-09-08 |
| 响应字段(单次查询) | ip、country、region(次级行政区代码)、city、postalCode(此数据源始终为 null)、latitude、longitude、continent、timezone(此数据源始终为 null)、found。 | Core 套餐:city、region、region_code、country、country_code、continent、continent_code、latitude、longitude、timezone、postal_code;ASN/组织字段针对更高套餐另行记录。IPinfo Core API 地理位置数据 · 2026-09-08 |
从 IPinfo 迁移
以下每个步骤的可运行版本都在 Watch-IP GitHub 仓库的 examples/migrate-from-ipinfo.mjs 中 — 它会发出两个请求并打印两个响应,方便你自行比较。
1. 替换批量请求
令牌从查询参数改为 Authorization 请求头,请求体也从纯数组改为带有「ips」键的对象。
IPinfo
curl -X POST "https://api.ipinfo.io/batch?token=$IPINFO_TOKEN" \
-H "Content-Type: application/json" \
-d '["203.0.113.1", "2001:db8::1"]'Watch-IP
curl https://api.watch-ip.com/v1/lookup \
-H "Authorization: Bearer YOUR_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"ips": ["203.0.113.1", "2001:db8::1"]}'2. 如果代码需要以 IP 为键的映射,请重新构建
IPinfo 的批量响应是一个可直接按 IP 索引的对象。Watch-IP 则返回一个有序数组 — 将它与请求中的「ips」数组配对,即可得到与现有代码可能期望的相同的按 IP 查询形式。
读取 IPinfo 响应
const city = data["203.0.113.1"].city;读取 Watch-IP 响应
const map = Object.fromEntries(ips.map((ip, i) => [ip, results[i]]));
const city = map["203.0.113.1"].city;3. 拆分更大的批量
接近 IPinfo 1,000 个 IP 上限的任务,需要拆分为多次连续调用以符合 Watch-IP 100 个 IP 的上限 — 相同总量下,预计请求次数约为原来的 10 倍。
一次 IPinfo 调用
await fromIpinfoBatch(thousandIps);多次 Watch-IP 调用
for (let i = 0; i < ips.length; i += 100) {
await fromWatchIpBatch(ips.slice(i, i + 100));
}有关此迁移的可运行版本,请参阅 GitHub 上 Watch-IP 单体仓库中的 examples/migrate-from-ipinfo.mjs。
常见问题
为什么 Watch-IP 的批量限制比 IPinfo 小?
IPinfo 文档记录的批量调用上限为 1,000 个 IP;Watch-IP 为 100 个。如果你经常在一个任务中批量处理超过 100 个 IP,请规划多次连续的 POST /v1/lookup 调用,而不是一次大调用。
Watch-IP 是否像 IPinfo Lite 一样提供免费额度?
截至 2026 年 9 月 8 日,没有。IPinfo Lite 免费提供国家级的无限请求;Watch-IP 的 IP 查询产品没有免费额度。Watch-IP 另一款独立的访问者地理位置产品有自己的免费额度,用于浏览器场景,其产品和密钥类型都与任意 IP 查询不同。
批量响应中的结果顺序会被保留吗?
Watch-IP 的 POST /v1/lookup 始终以与提交的「ips」数组相同的顺序返回其「results」数组。IPinfo 的批量响应是一个以 IP 为键的 JSON 对象,而不是有序数组,因此读取任一响应的代码都必须按其实际格式编写,不能假定两者可以互换。
来源
- IPinfo — 价格 — accessed 2026-09-08
- IPinfo — 批量增强 API — accessed 2026-09-08
- IPinfo — Core API 地理位置数据 — accessed 2026-09-08