Watch-IP

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-IPIPinfo
身份验证通过 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 对象,而不是有序数组,因此读取任一响应的代码都必须按其实际格式编写,不能假定两者可以互换。

来源

相关页面