基础信息
查看接口基本信息和返回格式
免责声明
温馨提示
接口描述
304+拨测节点,全国各地运营商节点对目标进行真实网络探测,返回逐节点明细+全网汇总统计
七日请求统计
接口地址
https://api.ovo1.cc/api/baota
请求方式
返回方式
返回预览
暂无返回示例
计费标准
了解接口计费方式和套餐价格
接口类型
免费接口:本接口对所有用户免费开放,每日有一定免费调用次数,超出后可继续使用或升级会员。
计费方式
QPS限制
每分钟最多80次请求,超限将拉黑600秒
每分钟最多120次请求,超限将拉黑600秒
每日请求次数
每日最多500次请求,次日0点自动重置
会员用户不限制每日请求次数
计费规则
安全认证
了解接口的认证方式和访问凭证管理
实名认证
本接口对所有用户开放,无需实名认证即可访问
认证方式
通过 HTTP Header 传递认证信息
通过 URL 参数传递认证信息
Token 管理
登录账户
使用您的账号密码登录平台,获取用户凭证
获取 Token
即可查看你的 Token 密钥
更换 Token
进入个人中心,点击「更换Token」,系统将生成新的 Token 密钥
保存 Token
请妥善保管您的 Token 密钥,泄露时请立即更换
Token 怪谈
安全建议
- 定期更换密钥,建议每 90 天更新一次
- 发现密钥泄露,请立即在个人中心「更换」该密钥
- 不要将密钥硬编码在代码中,使用环境变量存储
参数文档
了解接口的请求参数和响应字段说明
请求参数
| 参数名 | 类型 | 必填 | 默认值 | 可选值 | 说明 |
|---|---|---|---|---|---|
token |
string | 是 | 无 | 登录后显示你的请求token | 接口请求唯一认证标识! |
url |
string | 是 | 无 | host | 测速目标。web 传完整 URL(如 https://www.baidu.com,缺协议自动补 http://);tcp 支持 baidu.com:443 或配合 port 参数;ping/dns 传主机名或 IP;ssl 传域名,多个用英文逗号分隔(最多 10 个)。也可用 host 作为本参数的别名 |
type |
string | 是 | 无 | web | ping | tcp | dns | ssl | 测速类型:web(网站测速)、ping(PING测速)、tcp(TCP测速)、dns(DNS测速)、ssl(SSL检测)。兼容别名:website、网站测速、ping测速、tcp测速、dns测速、ssl检测 |
wait |
int | 否 | 25 | 60 | 轮询总时长上限(秒), 默认25, 最大60 |
port |
int | 否 | 80 | 1-65535 | 仅 type=tcp 有效:TCP 端口号,范围 1-65535。若 url 中已含 :端口,以 url 中的为准 |
record |
string | 否 | A | 记录类型 | 仅 type=dns 有效:DNS 记录类型,如 A、AAAA、CNAME、MX、TXT、NS、SOA 等 |
nodes |
int | 否 | 304 | 1-304 | 拨测节点数量,1-304。web/ping/tcp/dns 有效;0 或不传 = 使用平台全部在线节点(约 260 个,返回较慢),建议传 10-50 |
timeout |
int | 否 | web10000、其余5000 | 5000-10000 | 单节点超时时间,单位毫秒默认网站10000/其余5000 |
dns_server |
string | 否 | 无 | 无 | 指定DNS服务器(网站测速/DNS测速) |
follow_redirect |
string | 否 | 1 | 0 | 网站测速是否跟随跳转 0/1 默认1 |
mode |
string | 否 | json | text | 返回格式 |
响应参数
| 字段名 | 类型 | 说明 |
|---|---|---|
code
|
int | |
msg
|
string | |
data
|
object | 层级对象 |
|
│
├─
检测数量
|
int | |
|
│
检测结果
|
array | 数组 |
|
│
│
检测结果[0]
|
object | 层级对象 |
|
│
│
│
├─
主机
|
string | |
|
│
│
│
├─
证书状态
|
string | |
|
│
│
│
├─
状态说明
|
string | |
|
│
│
│
├─
检测时间
|
string | |
|
│
│
│
证书
|
object | 层级对象 |
|
│
│
│
│
├─
域名
|
string | |
|
│
│
│
│
├─
颁发者
|
string | |
|
│
│
│
│
├─
品牌
|
string | |
|
│
│
│
│
├─
证书类型
|
string | |
|
│
│
│
│
├─
加密算法
|
string | |
|
│
│
│
│
├─
是否通配符
|
boolean | |
|
│
│
│
│
备用域名
|
array | 数组 |
|
│
│
│
│
│
├─
备用域名[0]
|
string | |
|
│
│
│
│
├─
生效时间
|
string | |
|
│
│
│
│
├─
到期时间
|
string | |
|
│
│
│
│
├─
剩余天数
|
int | |
|
│
│
│
│
├─
SHA1指纹
|
string | |
|
│
│
│
│
├─
SHA256指纹
|
string | |
|
│
│
│
│
├─
序列号
|
string | |
|
│
│
│
证书链
|
array | 数组 |
|
│
│
│
│
证书链[0]
|
object | 层级对象 |
|
│
│
│
│
│
├─
使用者
|
string | |
|
│
│
│
│
│
├─
颁发者
|
string | |
|
│
│
│
│
│
├─
生效时间
|
string | |
|
│
│
│
│
│
├─
到期时间
|
string | |
|
│
│
│
│
│
└─
剩余天数
|
int |
| 字段名 | 类型 | 说明 |
|---|---|---|
code
|
int | |
msg
|
string | |
data
|
object | 层级对象 |
|
│
汇总
|
object | 层级对象 |
|
│
│
├─
任务ID
|
string | |
|
│
│
├─
测速类型
|
string | |
|
│
│
├─
测速目标
|
string | |
|
│
│
├─
节点总数
|
int | |
|
│
│
├─
有效节点
|
int | |
|
│
│
├─
平均总耗时ms
|
float | |
|
│
│
├─
最快ms
|
float | |
|
│
│
├─
最慢ms
|
float | |
|
│
│
状态码分布
|
object | 层级对象 |
|
│
│
│
├─
200
|
int | |
|
│
│
│
├─
无响应
|
int | |
|
│
节点结果
|
array | 数组 |
|
│
│
节点结果[0]
|
object | 层级对象 |
|
│
│
│
├─
节点ID
|
int | |
|
│
│
│
├─
响应IP
|
string | |
|
│
│
│
├─
完成时间
|
string | |
|
│
│
│
├─
HTTP状态码
|
int | |
|
│
│
│
├─
重定向次数
|
int | |
|
│
│
│
├─
DNS耗时ms
|
float | |
|
│
│
│
├─
连接耗时ms
|
float | |
|
│
│
│
├─
TLS耗时ms
|
float | |
|
│
│
│
├─
首字节耗时ms
|
float | |
|
│
│
│
├─
传输耗时ms
|
float | |
|
│
│
│
├─
总耗时ms
|
float | |
|
│
│
│
├─
下载字节数
|
int | |
|
│
│
│
└─
证书剩余天数
|
int |
| 字段名 | 类型 | 说明 |
|---|---|---|
code
|
int | |
msg
|
string | |
data
|
object | 层级对象 |
|
│
汇总
|
object | 层级对象 |
|
│
│
├─
任务ID
|
string | |
|
│
│
├─
测速类型
|
string | |
|
│
│
├─
测速目标
|
string | |
|
│
│
├─
节点总数
|
int | |
|
│
│
├─
有效节点
|
int | |
|
│
│
├─
平均总耗时ms
|
float | |
|
│
│
├─
最快ms
|
float | |
|
│
│
├─
最慢ms
|
float | |
|
│
│
├─
开放节点数
|
int | |
|
│
节点结果
|
array | 数组 |
|
│
│
节点结果[0]
|
object | 层级对象 |
|
│
│
│
├─
节点ID
|
int | |
|
│
│
│
├─
响应IP
|
string | |
|
│
│
│
├─
完成时间
|
string | |
|
│
│
│
├─
端口
|
int | |
|
│
│
│
├─
端口是否开放
|
boolean | |
|
│
│
│
├─
连接耗时
|
string | |
|
│
│
│
└─
总耗时
|
string |
| 字段名 | 类型 | 说明 |
|---|---|---|
code
|
int | |
msg
|
string | |
data
|
object | 层级对象 |
|
│
汇总
|
object | 层级对象 |
|
│
│
├─
任务ID
|
string | |
|
│
│
├─
测速类型
|
string | |
|
│
│
├─
测速目标
|
string | |
|
│
│
├─
节点总数
|
int | |
|
│
│
├─
有效节点
|
int | |
|
│
│
├─
平均总耗时ms
|
float | |
|
│
│
├─
最快ms
|
float | |
|
│
│
├─
最慢ms
|
float | |
|
│
│
解析记录汇总
|
array | 数组 |
|
│
│
│
├─
解析记录汇总[0]
|
string | |
|
│
节点结果
|
array | 数组 |
|
│
│
节点结果[0]
|
object | 层级对象 |
|
│
│
│
├─
节点ID
|
int | |
|
│
│
│
├─
响应IP
|
string | |
|
│
│
│
├─
完成时间
|
string | |
|
│
│
│
├─
记录类型
|
string | |
|
│
│
│
解析记录
|
array | 数组 |
|
│
│
│
│
└─
解析记录[0]
|
string | |
|
│
│
│
└─
解析耗时
|
string |
| 字段名 | 类型 | 说明 |
|---|---|---|
code
|
int | |
msg
|
string | |
data
|
object | 层级对象 |
|
│
汇总
|
object | 层级对象 |
|
│
│
├─
任务ID
|
string | |
|
│
│
├─
测速类型
|
string | |
|
│
│
├─
测速目标
|
string | |
|
│
│
├─
节点总数
|
int | |
|
│
│
├─
有效节点
|
int | |
|
│
│
├─
平均总耗时ms
|
float | |
|
│
│
├─
最快ms
|
float | |
|
│
│
├─
最慢ms
|
float | |
|
│
│
├─
平均延迟ms
|
float | |
|
│
│
├─
平均丢包率
|
float | |
|
│
节点结果
|
array | 数组 |
|
│
│
节点结果[0]
|
object | 层级对象 |
|
│
│
│
├─
节点ID
|
int | |
|
│
│
│
├─
响应IP
|
string | |
|
│
│
│
├─
完成时间
|
string | |
|
│
│
│
├─
发包数
|
int | |
|
│
│
│
├─
收包数
|
int | |
|
│
│
│
├─
丢包率
|
int | |
|
│
│
│
├─
平均延迟ms
|
float | |
|
│
│
│
├─
最小延迟ms
|
float | |
|
│
│
│
├─
最大延迟ms
|
float | |
|
│
│
│
├─
抖动ms
|
float | |
|
│
│
│
└─
总耗时ms
|
float |
状态码
了解接口返回的状态码含义及处理方式
接口状态码
| 状态码 | 说明 |
|---|---|
200 |
请求成功 |
201 |
上游业务失败:任务创建被拒 / 轮询超时 / 任务过期失败 |
202 |
参数不符合规范 |
203 |
网络请求失败 |
204 |
数据解析失败 |
300 |
未知错误 |
服务器状态码
| 状态码 | 说明 |
|---|---|
500 |
服务器错误 |
501 |
请求接口不存在 |
502 |
请求接口已下架 |
503 |
请求接口维护中 |
504 |
缺少请求token参数 |
505 |
请求token不存在 |
506 |
请求token已被封禁 |
507 |
请求token额度不足 |
508 |
今日请求token已达上限 |
509 |
请求ip不在token白名单内 |
510 |
请求token无权使用当前接口 |
511 |
接口请求频率过高,请稍后再试 |
512 |
该接口未开启在线测试功能 |
513 |
今日在线测试次数已达上限 |
514 |
今日该接口请求次数已达上限 |
515 |
该接口为会员专属接口,请携带会员token |
516 |
该接口为会员专属接口,请开通会员 |
517 |
接口请求过于频繁,已被临时限制 |
518 |
该接口需要实名认证,请先完成实名认证 |
519 |
当前Token今日请求次数已达上限 |
520 |
当前Token已被禁止使用 |
521 |
请求token余额不足 |
522 |
请求token额度和余额均不足 |
530 |
接口服务异常,请稍后再试 |
531 |
接口响应超时,请稍后再试 |
532 |
接口暂时不可用,请稍后再试 |
533 |
接口配置异常 |
534 |
请求参数错误,请检查后重试 |
535 |
接口返回数据异常 |
在线测试
在线调试接口,实时查看响应结果
返回结果
等待请求...
等待请求...
示例代码
查看多种编程语言的接口调用示例
/**
* API请求DEMO-PHP
*
* 本demo支持GET与POST请求。
*/
//你申请的token密钥
$API_TOKEN = 'YOUR_TOKEN';
//API接口地址
$API_URL = 'https://api.ovo1.cc/api/baota';
$get_post_data = array(
'token' => 'YOUR_TOKEN',
'url' => '无',
'type' => '无',
'wait' => '25',
'port' => '80',
'record' => 'A',
'nodes' => '304',
'timeout' => 'web10000、其余5000',
'dns_server' => '无',
'follow_redirect' => '1',
'mode' => 'json',
);
/*发起请求API接口:
第1个参数:API接口地址URL,跟上面的同名变量相对应,无需更改。
第2个参数:API接口参数数组,跟上面的同名变量相对应,无需更改。
第3个参数:请求协议(GET或POST),一般默认GET,部分接口需要POST请求,根据实际情况修改为POST即可。
*/
$resdata = api::send($API_URL, $get_post_data, 'GET'); //发起请求,注意这里要选择接口支持的协议,默认GET,可选POST
//打印请求结果
print($resdata);
///////////////你的业务代码可写在这里处理API返回的数据
/**
* API请求类
*/
class api
{
public static function send($API_URL, $get_post_data, $type)
{
$get_post_data = http_build_query($get_post_data);
$res = self::send_curl($API_URL, $type, $get_post_data, null);
return $res;
}
//封装好的CURL请求函数,支持POST|GET
public static function send_curl($API_URL, $type, $get_post_data)
{
$ch = curl_init();
if ($type == 'POST') {
curl_setopt($ch, CURLOPT_URL, $API_URL);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $get_post_data);
} elseif ($type == 'GET') {
curl_setopt($ch, CURLOPT_URL, $API_URL . '?' . $get_post_data);
}
curl_setopt($ch, CURLOPT_REFERER, $API_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$resdata = curl_exec($ch);
curl_close($ch);
return $resdata;
}
}
/**
* API请求DEMO-JavaScript
*
* 本demo支持GET与POST请求。
*/
//jQuery-Ajax
$.ajax({
url: 'https://api.ovo1.cc/api/baota',
data: {
token: 'YOUR_TOKEN',
url: '无',
type: '无',
wait: '25',
port: '80',
record: 'A',
nodes: '304',
timeout: 'web10000、其余5000',
dns_server: '无',
follow_redirect: '1',
mode: 'json',
},
type: 'GET', //请求协议(GET或POST),一般默认GET,部分接口需要POST请求,根据实际情况修改为POST即可。
dataType: 'json',
success: function(data) {
console.log(data); //请求成功,输出结果到控制台
},
timeout: 3000, //超时时间
error: function(data) {
console.log('请求失败'); //失败处理
}
});
/**
* API请求DEMO-NodeJs
*
* 本demo支持GET与POST请求。
*/
const https = require('https');
const querystring = require('querystring');
// 定义请求选项
const options = {
hostname: 'api.ovo1.cc',
path: '/api/baota',
method: 'GET'
};
// 发送GET请求
https.get(options, res => {
console.log(`statusCode: ${res.statusCode}`);
res.on('data', d => {
process.stdout.write(d);
});
}).on('error', error => {
console.error(error);
});
import requests
url = "https://api.ovo1.cc/api/baota"
params = {
"token": "YOUR_TOKEN",
"url": "无",
"type": "无",
"wait": "25",
"port": "80",
"record": "A",
"nodes": "304",
"timeout": "web10000、其余5000",
"dns_server": "无",
"follow_redirect": "1",
"mode": "json",
}
response = requests.get(url, params=params)
print(response.json())
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/url"
"strings"
)
func main() {
apiURL := "https://api.ovo1.cc/api/baota"
// 构建查询参数
params := url.Values{}
params.Add("token", "YOUR_TOKEN")
params.Add("url", "无")
params.Add("type", "无")
params.Add("wait", "25")
params.Add("port", "80")
params.Add("record", "A")
params.Add("nodes", "304")
params.Add("timeout", "web10000、其余5000")
params.Add("dns_server", "无")
params.Add("follow_redirect", "1")
params.Add("mode", "json")
fullURL := apiURL + "?" + params.Encode()
resp, err := http.Get(fullURL)
if err != nil {
fmt.Println("请求失败:", err)
return
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class ApiRequest {
public static void main(String[] args) {
try {
String apiUrl = "https://api.ovo1.cc/api/baota";
// 构建URL参数
StringBuilder params = new StringBuilder();
params.append("token=").append(URLEncoder.encode("YOUR_TOKEN", "UTF-8"));
params.append("&"); params.append("url=").append(URLEncoder.encode("无", "UTF-8"));
params.append("&"); params.append("type=").append(URLEncoder.encode("无", "UTF-8"));
params.append("&"); params.append("wait=").append(URLEncoder.encode("25", "UTF-8"));
params.append("&"); params.append("port=").append(URLEncoder.encode("80", "UTF-8"));
params.append("&"); params.append("record=").append(URLEncoder.encode("A", "UTF-8"));
params.append("&"); params.append("nodes=").append(URLEncoder.encode("304", "UTF-8"));
params.append("&"); params.append("timeout=").append(URLEncoder.encode("web10000、其余5000", "UTF-8"));
params.append("&"); params.append("dns_server=").append(URLEncoder.encode("无", "UTF-8"));
params.append("&"); params.append("follow_redirect=").append(URLEncoder.encode("1", "UTF-8"));
params.append("&"); params.append("mode=").append(URLEncoder.encode("json", "UTF-8"));
URL url = new URL(apiUrl + "?" + params.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
System.out.println(response.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
string apiUrl = "https://api.ovo1.cc/api/baota";
using (HttpClient client = new HttpClient()) {
// GET请求
var queryParams = new Dictionary<string, string> {
{ "token", "YOUR_TOKEN" },
{ "url", "无" },
{ "type", "无" },
{ "wait", "25" },
{ "port", "80" },
{ "record", "A" },
{ "nodes", "304" },
{ "timeout", "web10000、其余5000" },
{ "dns_server", "无" },
{ "follow_redirect", "1" },
{ "mode", "json" },
};
var queryString = new FormUrlEncodedContent(queryParams).ReadAsStringAsync().Result;
HttpResponseMessage response = await client.GetAsync(apiUrl + "?" + queryString);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
}
/**
* API请求DEMO-C
*
* 本demo支持GET与POST请求。
* 需要安装libcurl库
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
// API地址
const char* url = "https://api.ovo1.cc/api/baota";
// GET请求
void getRequest(CURL* curl) {
CURLcode res;
char fullUrl[1024];
snprintf(fullUrl, sizeof(fullUrl), "%s?token=YOUR_TOKEN&url=%E6%97%A0&type=%E6%97%A0&wait=25&port=80&record=A&nodes=304&timeout=web10000%E3%80%81%E5%85%B6%E4%BD%995000&dns_server=%E6%97%A0&follow_redirect=1&mode=json", url);
curl_easy_setopt(curl, CURLOPT_URL, fullUrl);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
}
int main() {
CURL* curl = curl_easy_init();
if(curl) {
getRequest(curl); curl_easy_cleanup(curl);
}
return 0;
}
/**
* API请求DEMO-C++
*
* 本demo支持GET与POST请求。
* 需要安装libcurl库
*/
#include <iostream>
#include <string>
#include <curl/curl.h>
int main() {
CURL* curl = curl_easy_init();
if(curl) {
std::string apiUrl = "https://api.ovo1.cc/api/baota";
// GET请求
std::string fullUrl = apiUrl + "?token=YOUR_TOKEN&url=%E6%97%A0&type=%E6%97%A0&wait=25&port=80&record=A&nodes=304&timeout=web10000%E3%80%81%E5%85%B6%E4%BD%995000&dns_server=%E6%97%A0&follow_redirect=1&mode=json";
curl_easy_setopt(curl, CURLOPT_URL, fullUrl.c_str());
CURLcode res = curl_easy_perform(curl);
if(res != CURLE_OK) {
std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
}
curl_easy_cleanup(curl);
}
return 0;
}
.版本 2
.支持库 spec
.子程序 _启动子程序
.局部变量 url, 文本型
.局部变量 data, 文本型
.局部变量 result, 文本型
url = "https://api.ovo1.cc/api/baota"
url = url + "?token=YOUR_TOKEN&url=%E6%97%A0&type=%E6%97%A0&wait=25&port=80&record=A&nodes=304&timeout=web10000%E3%80%81%E5%85%B6%E4%BD%995000&dns_server=%E6%97%A0&follow_redirect=1&mode=json"
result = 网页_访问 (url, 0, , , , , , , , , , )
调试输出 (result)
常见问题
查找常见问题的解决方案
【免责声明】
1. 本接口为技术学习交流的研究作品,仅供开发者了解网络拨测原理使用。
2. 本接口的数据来源于宝塔拨测平台(t.bt.cn)的公开匿名接口,本平台不存储、不修改、
不转售任何数据,所有测速任务均由宝塔官方节点实际执行。
3. 本接口不以任何形式破坏、绕过宝塔官方的商业付费功能,不影响宝塔拨测平台的
正常运营。若调用量对宝塔服务器造成额外负担,深表歉意,可通过邮箱联系站长撤下此接口(需资质证明)。
4. 若本接口的存在被宝塔官方认为侵犯了其合法权益(包括但不限于服务条款、
商标、服务器资源占用等),请通过邮件联系:email@ovo1.cc
本人/本站将在核实后 24 小时内无条件下架并停止相关服务。
5. 使用者通过本接口获取的测速数据,其准确性、完整性由宝塔官方节点决定,
本接口不对数据质量做任何担保,使用者据此做出的任何决策与本接口无关。
6. 严禁将本接口用于攻击、扫描他人服务器等非法用途,违者自行承担法律责任。
7. 本接口为免费/非营利性质,如涉及费用仅用于维持本站的运维成本。
联系邮箱:email@ovo1.cc
接口评论
登录后即可发表评论与回复