Skip to content

HTTP

OneBot 在启动时开启一个 HTTP 服务器,监听配置文件指定的 IP 和端口,接受路径为 /:action 的 API 请求(或 /:action/),如 /send_private_msg,请求可以使用 GET 或 POST 方法,可以通过 query 参数(?arg1=111&arg2=222)、urlencoded 表单(arg1=111&arg2=222)或 JSON({"arg1": "111", "arg2": "222"})传递参数。

参数可能有不同的类型,当用户通过 query 参数或 urlencoded 表单传参,或在 JSON 中使用字符串作为参数值时,OneBot 实现需要从字符串解析出对应类型的数据。

请求

假设配置中指定了 IP 和端口分别为 127.0.0.15700,则在浏览器中访问 http://127.0.0.1:5700/send_private_msg?user_id=1000010000&message=hello 即可给 QQ 号为 1000010000 的好友发送私聊消息 hello

如需使用 JSON 传递参数,则请求如下:

http
POST /send_private_msg HTTP/1.1
Host: 127.0.0.1:5700
Content-Type: application/json

{
    "user_id": 1000010000,
    "message": "hello"
}

注意

  • 当使用 query 参数或 urlencoded 表单传递参数时,参数值必须进行 urlencode。
  • 当使用 urlencoded 表单或 JSON 传递参数时,请求头中的 Content-Type 必须对应的为 application/x-www-form-urlencodedapplication/json

上例中调用的 API(即 action)为 send_private_msg,其它 API 及它们的参数和响应内容,见 API

响应

收到 API 请求并处理后,OneBot 会返回一个 HTTP 响应,根据具体情况不同,HTTP 状态码不同:

  • 如果 access token 未提供,状态码为 401(关于 access token,见 鉴权
  • 如果 access token 不符合,状态码为 403
  • 如果 POST 请求的 Content-Type 不支持,状态码为 406
  • 如果 POST 请求的正文格式不正确,状态码为 400
  • 如果 API 不存在,状态码为 404
  • 剩下的所有情况,无论操作实际成功与否,状态码都是 200

状态码为 200 时,响应内容为 JSON 格式,基本结构如下:

json
{
    "status": "ok",
    "retcode": 0,
    "data": {
        "id": 123456,
        "nickname": "滑稽"
    }
}

status 字段表示请求的状态:

  • ok 表示操作成功,同时 retcode (返回码)会等于 0
  • async 表示请求已提交异步处理,此时 retcode 为 1,具体成功或失败将无法获知
  • failed 表示操作失败,此时 retcode 既不是 0 也不是 1,具体错误信息应参考 OneBot 实现的日志

data 字段为 API 返回数据的内容,对于踢人、禁言等不需要返回数据的操作,这里为 null,对于获取群成员信息这类操作,这里为所获取的数据的对象,具体的数据内容将会在相应的 API 描述中给出。注意,异步版本的 API,data 永远是 null,即使其相应的同步接口本身是有数据。

相关配置

提示

配置项名称仅供参考,不同 OneBot 实现可以自行定义名称,只需在样例配置中给出注释即可。

配置项默认值说明
http.enabletrue是否启用 HTTP
http.host0.0.0.0HTTP 服务器监听的 IP
http.port5700HTTP 服务器监听的端口

上一节下一节
通信概述HTTP POST