免费 IP 查询 API
完全免费,无需注册即可调用(匿名有频率限制);注册后凭 API Key 可提升额度。返回 JSON,支持跨域。
1. 查询本机 IP
GET /api/myip
返回调用方公网 IP 及归属地。
2. 查询指定 IP
GET /api/ip?ip=8.8.8.8
可选参数 &key=你的APIKEY 提升调用额度。
3. 查询域名(解析并逐 IP 归属)
GET /api/ip?domain=baidu.com
返回域名解析出的各 IP 及归属地列表。
4. 命令行纯文本查询
GET /ip
专为 curl / shell 脚本设计,返回一行纯文本而非 JSON,方便直接用在脚本里。
$ curl https://www.i5p.com/ip 103.118.252.70 | 中国 香港 港岛 | 阿里云 $ curl "https://www.i5p.com/ip?ip=8.8.8.8" 8.8.8.8 | 美国 加利福尼亚州 山景城 | Google Cloud/DNS/DoH/DoT
不带参数查自己;?ip= 查指定地址;?lang=en 或 ja 切换语言。
# 通过代理查询,看到的就是代理的出口 IP(无账号密码) curl -x http://127.0.0.1:8080 https://www.i5p.com/ip # 代理需要账号密码时 curl -x http://user:password@127.0.0.1:8080 https://www.i5p.com/ip
socks5 代理把 http:// 换成 socks5:// 即可。这是确认代理有没有生效、出口落在哪里最快的办法。
返回示例
{
"code": 0,
"msg": "ok",
"data": {
"ip": "8.8.8.8",
"country": "美国",
"province": "加利福尼亚州",
"city": "山景城",
"zip": "",
"isp": "Google Cloud/DNS/DoH/DoT"
}
}
5. 二维码生成
GET /qr/?data=内容
GET 请求直接返回 image/png 图片,可直接用在 <img> 标签里。
基础参数
| th_param | th_desc | th_req |
|---|---|---|
| data | 二维码内容。必填,需 URL 编码,上限 1200 字节。 | req_yes |
| size | 图片边长,80–1200,默认 320。实际输出取不超过该值的码点整数倍,所以可能比你给的略小几像素——这样每个码点才是整像素、扫码更稳。 | req_no |
| level | 纠错级别 L(7%) / M(15%) / Q(25%) / H(30%),默认 H。加 Logo 必须用 H,否则中心被遮挡后可能扫不出。 | req_no |
| p | 样式编号。可以是预置模板号(1–120),也可以是登录后生成的专属编号(形如 u7)。不传则黑白。 | req_no |
| format | png(默认,直接返回图片)或 base64(返回 JSON,内含 data URI,方便前端直接塞进 src)。 | req_no |
样式参数(可直接写在 URL 上)
| th_param | th_desc |
|---|---|
| fg | 前景色(码点颜色),十六进制,如 %23e11d48(# 需转义成 %23)。 |
| bg | 背景色,同上。 |
| fg2 | 渐变副色。仅当 grad 不为 none 时生效。 |
| grad | 渐变方向:none 无 / h 水平 / v 垂直 / d 对角。 |
| shape | 码点形状:square 方形 / dot 圆点 / rounded 圆角。 |
| eye | 三个定位图的形状:square / rounded / circle。 |
| margin | 静区边距,按码点个数算,0–10,默认 2。留白太少会影响识别率。 |
| text | 底部文字,最多 30 字。传空值(&text=)可显式去掉编号里设的文字。 |
| text_color | 底部文字颜色,十六进制。 |
参数优先级:URL 覆盖编号
以 p 指向的样式为基底,URL 上显式给出的参数逐项覆盖它,没给的沿用编号里的设置。所以 p=u7&size=600 是「u7 的样式、尺寸改成 600」,u7 里的颜色、码点、底部文字都还在。不传 p 时基底是默认黑白。
唯一的例外是 Logo:它是存在服务器上的文件,只能通过编号带出来,没法用 URL 参数传。想要带 Logo 的码,就得先生成专属编号。
三种用法
域名绑定:连 p 都不用传
在我的编号里把一个域名绑到某个编号后,从该域名页面发出的请求(按 Referer 判断)只要传 data 就会自动套用绑定的样式。绑 example.com 时,www.example.com 同样命中。
示例
<!-- 默认黑白 --> <img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com"> <!-- 直接写样式:红色圆点码 + 对角渐变 --> <img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&fg=%23e11d48&fg2=%23f59e0b&grad=d&shape=dot&eye=circle"> <!-- 用预置模板 82 号,尺寸 300 --> <img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&size=300&p=82"> <!-- 用专属编号(尺寸、颜色、Logo、底部文字都在编号里) --> <img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&p=u7"> <!-- 用专属编号,但这次临时把尺寸调到 600 --> <img src="https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&p=u7&size=600"> <!-- 返回 base64,供前端直接使用 --> curl "https://www.i5p.com/qr/?data=https%3A%2F%2Fwww.i5p.com&p=82&format=base64"
注意事项
- 返回的是图片,不遵循 JSON 错误码;参数有误时改为返回 JSON 错误说明,
<img>里会显示成裂图。调试时直接在浏览器打开该地址就能看到原因。 - 同样的参数每次生成的图片完全一致,并带
ETag与Cache-Control: max-age=86400,可以放心让 CDN 和浏览器缓存。 - 匿名调用有每分钟频率限制(后台可调,当前 1200 次/分钟)。超限返回
429。 - 内容越长、纠错级别越高,码点越密。长网址建议先短链,或把纠错级别降到
M。
完整参数与在线调试见 二维码
6. 条形码生成
GET /bar/?data=内容&type=ean13
GET 请求直接返回 image/png 图片,支持 7 种一维码制。
data 条码内容(必填);type 码制 code128 / ean13 / ean8 / upca / code39 / itf / codabar,默认 code128;w 单元宽度 1–8;h 高度 20–400;fg/bg 颜色;text=0 隐藏文字。
<img src="https://www.i5p.com/bar/?data=6901234567892&type=ean13&w=3&h=140">
完整参数与在线调试见 条形码
请求签名
带 key 的请求必须签名,api_secret 永远不出现在 URL 里。即使链接被日志或浏览器历史记录下来,也无法伪造后续请求。
key API Key;ts Unix 时间戳(秒,容差 300 秒);nonce 6–64 位随机串(300 秒内不可重复);sign 签名值。四个参数也可改用 X-Api-Key / X-Api-Ts / X-Api-Nonce / X-Api-Sign 请求头传递。
算法:取除 sign、callback 外的全部参数,按参数名字典序升序,拼成 k1=v1&k2=v2(值用原始值,不做 URL 编码),再用 api_secret 做 HMAC-SHA256,输出小写十六进制。
// PHP
$key = 'a1b2c3d4e5';
$secret = '你的secret';
$p = ['ip' => '8.8.8.8', 'key' => $key, 'ts' => time(), 'nonce' => bin2hex(random_bytes(6))];
ksort($p);
$base = [];
foreach ($p as $k => $v) { $base[] = "$k=$v"; }
$p['sign'] = hash_hmac('sha256', implode('&', $base), $secret);
echo file_get_contents('https://www.i5p.com/api/ip?' . http_build_query($p));
// Node.js
const crypto = require('crypto');
const key = 'a1b2c3d4e5', secret = '你的secret';
const p = { ip: '8.8.8.8', key, ts: Math.floor(Date.now() / 1000),
nonce: crypto.randomBytes(6).toString('hex') };
const base = Object.keys(p).sort().map(k => `${k}=${p[k]}`).join('&');
p.sign = crypto.createHmac('sha256', secret).update(base).digest('hex');
const url = 'https://www.i5p.com/api/ip?' + new URLSearchParams(p);
fetch(url).then(r => r.json()).then(console.log);
#!/bin/bash KEY="a1b2c3d4e5"; SECRET="你的api_secret" IP="8.8.8.8"; TS=$(date +%s); NONCE=$(head -c6 /dev/urandom | xxd -p) BASE="ip=$IP&key=$KEY&nonce=$NONCE&ts=$TS" # 已按字典序排列 SIGN=$(printf '%s' "$BASE" | openssl dgst -sha256 -hmac "$SECRET" -r | cut -d' ' -f1) curl "https://www.i5p.com/api/ip?$BASE&sign=$SIGN"
Key 与 Secret 在用户中心创建。若后台关闭了「API 强制签名」,则只传 key 也可调用(不推荐)。
跨域与 JSONP
所有 JSON 接口都带 Access-Control-Allow-Origin: *,可直接 fetch/XHR 跨域调用;也支持 ?callback=函数名(或 jsonp=)返回 JSONP,供 <script> 标签直接引用。
<script src="https://www.i5p.com/api/myip?callback=showIp"></script>
<script>function showIp(r) { console.log(r.data.ip); }</script>
说明
code为 0 表示成功,非 0 为错误码(400 参数错误 / 401 Key 无效 / 429 超出频率 / 403 被限制)。- 匿名默认限制:5 QPS、200000 次/天/IP;注册用户凭 Key 默认 5 QPS、5000000 次/天。
- 二维码与条形码接口返回的是图片,不遵循上面的 JSON 错误码;参数有误时返回 JSON 错误说明。
- 如需更高额度,注册账号后在用户中心创建 API Key。