Synology NAS API 免费获得总计 space
Synology NAS API get free and total space
我正在尝试调用 Synology NAS 的 API 来检索免费 space 和总共 space 可用的信息。
我的登录有效,我正在获取我的令牌,使用该令牌的请求显示为“成功”。
但是,当我尝试调用 list_share
方法时,additional
值设置为 volume_status
,根据 API 的文档应该给我所需的数据,我得到的是:
{
"data": {
"offset": 0,
"shares": [],
"total": 0
},
"success": true
}
我提出的要求是:
https://NAME:5001/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share&additional=volume_status&_sid=TOKEN
我是不是提出了错误的请求?我是否需要将方法从 list_share
更改为 list
?
我是否传递了错误的 additional
值?
我正在使用的文档可以在谷歌搜索“Synology NAS rest API”时找到。我为 PDF here.
插入了直接下载 link
根据链接文档,附加参数需要额外的括号和引号,如下所示:
https://NAME:5001/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share&additional=["volume_status"]&_sid=TOKEN
根据您使用的库,您可能需要对括号和引号进行编码,但大多数库都应该为您做这件事:)
为了得出这个结论,我是这样做的:
在链接文档中,我找到了有关 list_share 的部分和提供的示例:
GET /webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share& additional=%5B%22real_path%22%2C%22owner%2Ctime%22%5D
这是完全不可读的,因为 url 已经编码,但是打开浏览器控制台和 运行
decodeURIComponent("/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share&additional=%5B%22real_path%22%2C%22owner%2Ctime%22%5D")
引导我阅读 url:
/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share&additional=["real_path","owner,time"]
这是一个例子,如何登录,打印数据,再次注销:
const http = require("http");
// Helper function to get JSON from an endpoint
function getJson(url) {
return new Promise((resolve, reject) => {
http.get(url, (res) => {
res.setEncoding("utf8");
let rawData = "";
res.on("data", (chunk) => {
rawData += chunk;
});
res.on("end", () => {
try {
const parsedData = JSON.parse(rawData);
resolve(parsedData);
} catch (e) {
reject(e);
}
});
});
});
}
(async () => {
const host = "synology:5000";
const user = "userHere";
const password = "passwordHere";
// login
const {
data: { sid },
} = await getJson(
`http://${host}/webapi/query.cgi?api=SYNO.API.Auth&method=login&version=3&account=${user}&passwd=${password}&session=test&format=sid`
);
const url = `http://${host}/webapi/query.cgi?api=SYNO.FileStation.List&method=list_share&version=2&_sid=${sid}&additional=["volume_status"]`;
const { data } = await getJson(url);
data.shares.forEach((share) => {
console.log(share.name, "-", share.path);
console.log(share.additional.volume_status);
});
//logout
await getJson(
`http://${host}/webapi/query.cgi?api=SYNO.API.Auth&method=logout&version=3&session=test`
);
})();
我正在尝试调用 Synology NAS 的 API 来检索免费 space 和总共 space 可用的信息。
我的登录有效,我正在获取我的令牌,使用该令牌的请求显示为“成功”。
但是,当我尝试调用 list_share
方法时,additional
值设置为 volume_status
,根据 API 的文档应该给我所需的数据,我得到的是:
{
"data": {
"offset": 0,
"shares": [],
"total": 0
},
"success": true
}
我提出的要求是:
https://NAME:5001/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share&additional=volume_status&_sid=TOKEN
我是不是提出了错误的请求?我是否需要将方法从 list_share
更改为 list
?
我是否传递了错误的 additional
值?
我正在使用的文档可以在谷歌搜索“Synology NAS rest API”时找到。我为 PDF here.
插入了直接下载 link根据链接文档,附加参数需要额外的括号和引号,如下所示:
https://NAME:5001/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share&additional=["volume_status"]&_sid=TOKEN
根据您使用的库,您可能需要对括号和引号进行编码,但大多数库都应该为您做这件事:)
为了得出这个结论,我是这样做的:
在链接文档中,我找到了有关 list_share 的部分和提供的示例:
GET /webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share& additional=%5B%22real_path%22%2C%22owner%2Ctime%22%5D
这是完全不可读的,因为 url 已经编码,但是打开浏览器控制台和 运行
decodeURIComponent("/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share&additional=%5B%22real_path%22%2C%22owner%2Ctime%22%5D")
引导我阅读 url:
/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share&additional=["real_path","owner,time"]
这是一个例子,如何登录,打印数据,再次注销:
const http = require("http");
// Helper function to get JSON from an endpoint
function getJson(url) {
return new Promise((resolve, reject) => {
http.get(url, (res) => {
res.setEncoding("utf8");
let rawData = "";
res.on("data", (chunk) => {
rawData += chunk;
});
res.on("end", () => {
try {
const parsedData = JSON.parse(rawData);
resolve(parsedData);
} catch (e) {
reject(e);
}
});
});
});
}
(async () => {
const host = "synology:5000";
const user = "userHere";
const password = "passwordHere";
// login
const {
data: { sid },
} = await getJson(
`http://${host}/webapi/query.cgi?api=SYNO.API.Auth&method=login&version=3&account=${user}&passwd=${password}&session=test&format=sid`
);
const url = `http://${host}/webapi/query.cgi?api=SYNO.FileStation.List&method=list_share&version=2&_sid=${sid}&additional=["volume_status"]`;
const { data } = await getJson(url);
data.shares.forEach((share) => {
console.log(share.name, "-", share.path);
console.log(share.additional.volume_status);
});
//logout
await getJson(
`http://${host}/webapi/query.cgi?api=SYNO.API.Auth&method=logout&version=3&session=test`
);
})();