Synology_Download_Station_Web_API

17 min read

文档地址: https://t.me/v2ex_post/49722

步骤

Step 1: 获取API信息
首先,您的应用程序需要从目标 DiskStation 获取 API 信息,以了解目标 DiskStation 上可以使用哪些 API。可以通过从 SYNO.API.Info API 向 query.cgi 发出请求来访问此信息。响应中提供的信息包含可用 API 的名称、版本和方法。

Step 2: 登录并获取会话ID
在发送任何 API 请求之前,您需要登录到目标 DiskStation 并获取会话 ID。可以通过向 SYNO.API.Auth API 的 login.cgi 发送请求来进行身份验证,并在响应中获取会话 ID。

Step 3: 发送API请求
一旦您获得了会话 ID,就可以向目标 DiskStation 发送 API 请求。请求必须包括所需的参数和方法名称,并且必须使用 HTTPS 协议进行加密。

Step 4: 处理API响应
一旦您发送了 API 请求,就会收到一个响应。响应将包括有关请求结果的详细信息,例如成功或失败、错误代码和数据(如果适用)。您需要根据响应处理结果并采取适当的措施。

Step 5: 注销会话
当您完成所有 API 请求时,应使用 SYNO.API.Auth API 的 logout.cgi 方法注销会话。这将使会话 ID 失效并确保安全性。

登录

什么是sid值? sid是授权会话ID,它是在登录时由SYNO.API.Auth API返回的。每个API请求都应该传递sid值,以便服务器知道哪个会话正在进行操作。

以下是一个完整的示例,演示如何使用SYNO.API.Auth API登录会话并获取会话ID:

请求:

http://192.168.8.74:5000/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=all

响应:

{
 "data": {
  "SYNO.API.Info": {
   "path": "query.cgi",
   "maxVersion": 2,
   "requestFormat": "HTTP_GET",
   "responseFormat": "JSON",
   "version": 1,
   "minVersion": 1
  }
 },
 "success": true
}

请求:

http://192.168.8.74:5000/webapi/query.cgi?api=SYNO.API.Auth&version=2&method=login&account=admin&passwd=12345&session=DownloadStation&format=cookie

响应:

{
 "data":{
  "sid":"ohOCjwhHhwghw"
 },
 "success":true
}

在上面的响应中,您可以看到名为“sid”的属性,其值为“ohOCjwhHhwghw”。这就是您的会话ID。

现在,您可以使用此会话ID来保持已登录状态,并执行其他需要身份验证的操作。

  1. “format=sid”:响应将包含一个名为“sid”的属性,其值为您的会话ID。这是默认格式。

  2. “format=token”:响应将包含一个名为“token”的属性,其值为您的会话令牌。令牌是一种更安全的身份验证方式,因为它不需要在每个API请求中发送您的密码。

“sid”参数是每个API请求都需要提供的,而不仅仅是第一次登录会话时。如果您使用“format=cookie”或“format=token”登录会话,则不需要在每个API请求中提供会话ID或令牌。

示范如何获取下载列表

要获取下载列表,您可以使用SYNO.DownloadStation.Task API中的“list”方法。在登录会话后,您可以使用以下URL来请求下载任务列表:

http://192.168.8.74:5000/webapi/DownloadStation/task.cgi?api=SYNO.DownloadStation.Task&version=1&method=list&sid=ohOCjwhHhwghw

在上面的URL中,“api”参数为“SYNO.DownloadStation.Task”,“version”参数为“1”,“method”参数为“list”,而“sid”参数是您的会话ID。如果请求成功,则响应将包含一个名为“tasks”的属性,其中包含所有下载任务的详细信息。例如:

{
 "data":{
  "offset":0,
  "tasks":[
   {
    "id":"SYNO.DownloadStation.Task.download.1",
    "type":"bt",
    "username":"admin",
    "title":"Ubuntu-20.04-desktop-amd64.iso",
    "size":2827056128,
    "status":"downloading",
    ...
   },
   {
    ...
   }
  ],
  "total":2
 },
 "success":true
}

在上面的响应中,“tasks”属性是一个数组,其中包含每个下载任务的详细信息。每个任务都有一个唯一的ID、类型、用户名、标题、大小和状态等属性。

其它API 见上面的文档处

通用错误代码

  • 100:未知错误
  • 101:无效参数
  • 102:API不存在
  • 103:方法不存在
  • 104:版本不存在
  • 105:权限不足
  • 106:登录失败或会话超时
  • 107:API已过期