You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调用VNDB API?非HTTP协议API使用及工具适配疑问

刚好用过VNDB的API,它和你平时用的HTTP接口完全不一样,是自定义的TCP文本协议,所以axios这类HTTP工具直接用不了,我来给你拆解清楚怎么操作:

先搞懂VNDB API的消息格式

你看到的示例login { "protocol" : 1, "username" : "ayo" } 0x04 0x04其实是三个部分的组合:

  • 开头是命令名称(比如login、dbstats、vn查询等)
  • 空格后跟着标准JSON格式的参数(不是非标准,只是和命令拼在一起了)
  • 结尾必须加两个ASCII EOT字符(十六进制0x04,对应键盘的Ctrl+D),这是协议规定的消息结束标记

如何发送请求(代码示例)

因为是TCP协议,你需要用TCP客户端来连接,下面给两个常用语言的例子:

Node.js(用TLS加密连接)

const tls = require('tls');

// 连接VNDB的TLS加密端口19535
const socket = tls.connect({
  host: 'api.vndb.org',
  port: 19535
}, () => {
  console.log('已连接到VNDB API');
  // 发送登录命令(即使匿名登录也需要这一步,protocol必须设为1)
  const loginCommand = 'login { "protocol": 1, "client": "MyTestClient", "clientver": 0.1 }' 
    + String.fromCharCode(4) + String.fromCharCode(4); // 两个EOT字符
  socket.write(loginCommand);
});

// 接收API返回的消息
socket.on('data', (data) => {
  const response = data.toString().trim();
  console.log('收到响应:', response);
  
  // 登录成功后可以发送查询命令,比如获取数据库统计
  if (response.includes('loginok')) {
    const dbstatsCommand = 'dbstats' + String.fromCharCode(4) + String.fromCharCode(4);
    socket.write(dbstatsCommand);
  }
});

socket.on('error', (err) => {
  console.error('连接出错:', err);
});

Python(用SSL加密连接)

import ssl
import socket

# 创建SSL上下文,连接加密端口19535
context = ssl.create_default_context()
sock = socket.create_connection(('api.vndb.org', 19535))
secure_sock = context.wrap_socket(sock, server_hostname='api.vndb.org')

# 发送登录命令
login_cmd = b'login { "protocol": 1, "client": "MyPythonClient", "clientver": 0.1 }\x04\x04'
secure_sock.sendall(login_cmd)

# 读取登录响应
response = secure_sock.recv(4096)
print('收到登录响应:', response.decode())

# 发送数据库统计查询
dbstats_cmd = b'dbstats\x04\x04'
secure_sock.sendall(dbstats_cmd)
response = secure_sock.recv(4096)
print('收到统计响应:', response.decode())

# 关闭连接
secure_sock.close()

能不能用Postman访问?

很遗憾,Postman是专门针对HTTP/REST接口的工具,不支持自定义TCP文本协议,所以没法直接用。不过你可以用这些TCP客户端工具来测试:

  • 命令行工具:telnet api.vndb.org 19534(明文端口),输入命令后按两次Ctrl+D发送;或者用nc api.vndb.org 19534(netcat)
  • 图形化工具:比如Hercules、SocketTest这类TCP/UDP客户端,支持手动输入文本并添加特殊字符(比如EOT)

几个关键注意事项

  • 必须先发送login命令:哪怕是匿名访问,也要发送login { "protocol": 1 },否则其他命令会被API拒绝
  • 消息结尾的两个EOT字符不能少:这是API识别消息结束的唯一标记,少一个都不行
  • 优先用TLS端口19535:明文端口19534不加密,容易泄露数据,生产环境一定要用加密连接
  • 响应格式和请求类似:返回的消息也是「命令名+JSON数据+EOT」,你需要自己拆分解析

内容的提问来源于stack exchange,提问作者chachathok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:10:12