二维码解码免费
二维码解码 · 最后更新:2026-09-03
🧪 在线调试
GET
https://ip258.cn/api/qrcode.php
等待发送请求…
📖 快速调用
本接口支持两种调用方式:
1. GET方式:传入公网图片URL解析二维码内容;
2. POST方式:直接上传图片文件解析二维码内容;
🔗 接口信息
| 接口地址 | https://ip258.cn/api/qrcode.php |
| 请求方式 | GET / POST,支持跨域 |
| 数据格式 | JSON(UTF-8) |
| 支持类型 | 二维码解码 |
| 计费方式 | 免费,无需注册 / Key |
📥 请求参数
| 参数 | 必填 | 类型 | 说明 |
|---|
file_url | 可选 | string | 二维码图片公网 URL(GET 方式),与 file 二选一 |
file | 可选 | file | POST 上传的图片文件,仅支持 JPG/PNG/GIF/WEBP,与 file_url 二选一 |
📤 返回示例
{
"code": 200,
"msg": "解码成功",
"data": {
"contents": ["https://example.com"]
},
"success": true,
"api_from": "ip258.cn免费二维码解码接口"
}🗂 data 字段说明
| 字段 | 类型 | 说明 |
|---|
code | int | 状态码,200 表示成功 |
msg | string | 提示信息,解码失败时给出原因 |
data | object | 返回数据主体 |
data.contents | array | 识别出的内容列表(一张图含多个二维码时会有多条) |
success | boolean | 是否解码成功 |
api_from | string | 接口来源标识(固定值) |
💻 代码示例
# 方式一:GET(图片已有公网URL)
curl "https://ip258.cn/api/qrcode.php?file_url=https://example.com/qr.png"
# 方式二:POST(上传本地图片文件)
curl -X POST "https://ip258.cn/api/qrcode.php" -F "file=@./qr.png"
<?php
// 方式一:GET(图片已有公网URL)
$fileUrl = urlencode('https://example.com/qr.png');
$res = json_decode(file_get_contents("https://ip258.cn/api/qrcode.php?file_url={$fileUrl}"), true);
echo $res['data']['contents'][0];
// 方式二:POST(上传本地图片)
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://ip258.cn/api/qrcode.php',
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => ['file' => new CURLFile('qr.png')],
CURLOPT_RETURNTRANSFER => true
]);
$res2 = json_decode(curl_exec($ch), true);
echo $res2['data']['contents'][0];
?>
// 方式一:GET(图片已有公网URL)
const fileUrl = encodeURIComponent('https://example.com/qr.png');
const res = await fetch(`https://ip258.cn/api/qrcode.php?file_url=${fileUrl}`).then(r => r.json());
console.log(res.data.contents[0]);
// 方式二:POST(上传文件,fileInput 为 <input type="file">)
const form = new FormData();
form.append('file', fileInput.files[0]);
const res2 = await fetch('https://ip258.cn/api/qrcode.php', {
method: 'POST',
body: form
}).then(r => r.json());
console.log(res2.data.contents[0]);
import requests
# 方式一:GET(图片已有公网URL)
file_url = 'https://example.com/qr.png'
res = requests.get('https://ip258.cn/api/qrcode.php', params={'file_url': file_url}).json()
print(res['data']['contents'][0])
# 方式二:POST(上传本地图片)
with open('qr.png', 'rb') as f:
res2 = requests.post('https://ip258.cn/api/qrcode.php', files={'file': f}).json()
print(res2['data']['contents'][0])
🚦 状态码
| code | 含义 | 处理 |
|---|
200 | 解码成功 | 取 data.contents 即可 |
-1 | 参数错误 | 检查是否传了 file_url,或 POST 是否上传了 file 文件、图片格式是否支持 |
-2 | 解码接口请求失败 | 稍后重试,或检查网络 |
-3 | 响应解析失败 | 稍后重试 |
-4 | 二维码识别失败 | 图片可能不是二维码、太模糊或已损坏,换清晰图片重试 |
-5 | 系统异常 | 稍后重试 |
403 | IP 被临时限制 | 触发防护机制,请等待几分钟后再试 |
429 | 请求过于频繁 | 稍后重试 |
⏱ 频率限制
🆓 免费接口限流
| 规则 | 说明 |
|---|
| 基础频率 | 每个 IP 每分钟最多 60 次,超限返回 429 |
| 瞬时脉冲 | 每秒最多 4 次,防止短时间集中刷 |
| 自动封禁 | 5 分钟内触发限流 3 次 → 自动封禁 15 分钟 |
| 升级封禁 | 1 小时内触发 6 次 → 自动封禁 60 分钟 |
| 永久封禁 | 24 小时内触发 12 次 → 永久拉黑该 IP |
❓ 常见问题
| 问题 | 原因 & 解决 |
|---|
| 返回 -1 是什么 | 参数错误:没传 file_url、或 POST 没上传 file 文件、或图片格式不支持 |
| 返回 -4 是什么 | 图片不是二维码、太模糊或已损坏,换一张清晰的二维码图片重试 |
| 返回 403 怎么办 | IP 被临时封禁了,通常是触发限流导致;等待几分钟自动解除,确认误伤可在后台手动解封 |
| 返回 429 怎么办 | 请求太频繁,降低调用频率(每个 IP 每分钟限 60 次) |
| 支持哪些图片格式 | JPG / PNG / GIF / WEBP,建议图片小于 2MB |
| GET 和 POST 怎么选 | 图片有公网 URL 用 GET(传 file_url);本地 / 私密图片用 POST(上传 file) |