TgeBrowser API 文档
浏览器自动化 API
TgeBrowser 提供 RESTful API,支持通过编程方式控制浏览器环境的全生命周期,实现自动化部署和管理。
特点: 简洁高效 • 稳定可靠 • 完整错误处理 • 实时状态同步
基础配置
认证方式
所有 API 请求必须包含有效的身份认证:
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
User-Agent: YourApp/1.0curl -X GET http://127.0.0.1:50326/api/status \
-H "Authorization: Bearer sk-1234567890abcdef" \
-H "Content-Type: application/json"const headers = {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
fetch('http://127.0.0.1:50326/api/status', { headers })
.then((response) => response.json())
.then((data) => console.log(data))获取方式: 登录 TgeBrowser 客户端 → API → 生成新密钥
请求速率限制
为保证服务稳定性和公平使用,API 实施以下速率限制:
| 限制类型 | 限制值 | 说明 |
|---|---|---|
| 请求频率 | 100 次/分钟 | 每分钟最多 100 次请求 |
当超出速率限制时,API 将返回 429 Too Many Requests 错误:
{
"success": false,
"message": "请求太频繁,请稍后再试。"
}最佳实践: 实现请求重试机制,遇到 429 错误时等待后重试 • 合理规划请求频率,避免突发大量请求 • 考虑使用批量操作接口减少请求次数
请求格式
HTTP 方法规范
| 方法 | 用途 | 示例 |
|---|---|---|
GET | 获取资源信息 | 查询环境列表 |
POST | 创建新资源 | 创建浏览器环境 |
PUT | 更新完整资源 | 更新环境配置 |
PATCH | 部分更新资源 | 修改环境状态 |
DELETE | 删除资源 | 删除环境 |
响应格式
标准响应结构
{
"success": true,
"message": "操作成功",
"data": {
// 响应数据
}
}{
"success": false,
"message": "详细错误描述",
"code": "ERROR_CODE"
}错误代码
| HTTP 状态 | 错误代码 | 描述 | 解决方案 |
|---|---|---|---|
400 | INVALID_PARAMS | 请求参数无效 | 检查请求参数格式和类型 |
401 | AUTH_FAILED | 认证失败 | 检查 API Key 是否有效 |
403 | PERMISSION_DENIED | 权限不足 | 联系管理员分配权限 |
404 | RESOURCE_NOT_FOUND | 资源不存在 | 确认资源 ID 正确性 |
409 | RESOURCE_CONFLICT | 资源冲突 | 检查资源状态或名称冲突 |
429 | RATE_LIMITED | 请求频率限制 | 降低请求频率或升级套餐 |
500 | SERVER_ERROR | 服务器内部错误 | 稍后重试或联系技术支持 |
错误处理: 始终检查 success 字段 • 根据 code 字段进行错误分类处理
浏览器环境管理
1. 获取服务状态
检查 API 服务运行状态和基础信息,建议在应用启动时调用此接口验证连接。
请求参数
无需请求参数
请求示例
curl -X GET http://127.0.0.1:50326/api/status \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"const response = await fetch('/api/status', {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
})
const data = await response.json()
console.log(data)import requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
response = requests.get(
'http://127.0.0.1:50326/api/status',
headers=headers
)
print(response.json())响应数据
{
"success": true,
"message": "服务运行正常"
}2. 创建浏览器环境
创建一个新的浏览器环境,支持完整的指纹配置、代理设置、启动参数等。每个环境都是完全独立的沙盒,确保数据隔离。创建成功后返回 envId 用于后续操作。
请求示例
curl -X POST http://127.0.0.1:50326/api/browser/create \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"browserName": "Facebook营销环境",
"groupId": 1,
"proxy": {
"protocol": "socks5",
"host": "proxy.example.com",
"port": 1080,
"username": "user123",
"password": "pass123"
},
"fingerprint": {
"os": "Windows",
"platformVersion": 11,
"kernel": "135",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.9.2537 Safari/537.36",
"canvas": true,
"audioContext": true,
"speechVoices": true,
"clientRects": true,
"resolution": "1920x1080",
"windowWidth": 1000,
"windowHeight": 1000,
"ram": 8,
"cpu": 4,
"language": "en-US",
"languageBaseIp": true,
"uiLanguage": "en-US",
"uiLanguageBaseIp": true,
"timezone": "Europe/Amsterdam",
"timezoneBaseIp": true,
"geolocationBaseIp": true,
"lng": "116.397128",
"lat": "39.916527",
"hardwareAcceleration": true,
"disableSandbox": false,
"startupParams": "",
"deviceMedia": false,
"deviceName": "DESKTOP-ABCD",
"randomFingerprint": false,
"blockLargeImages": false,
"maxImageKB": 300,
"syncCookies": false,
},
"startInfo": {
"startPage": {
"mode": "custom",
"value": [
"https://www.baidu.com"
]
},
"otherConfig": {
"openConfigPage": false,
"checkPage": true,
"extensionTab": true
}
}
}'const createBrowser = async () => {
const response = await fetch('/api/browser/create', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
browserName: 'Facebook营销环境',
groupId: 1,
proxy: {
protocol: 'socks5',
host: 'proxy.example.com',
port: 1080,
username: 'user123',
password: 'pass123'
},
fingerprint: {
os: 'Windows',
platformVersion: 11,
kernel: '135',
userAgent:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.9.2537 Safari/537.36',
canvas: true,
audioContext: true,
speechVoices: true,
clientRects: true,
resolution: '1920x1080',
windowWidth: 1000,
windowHeight: 1000,
ram: 8,
cpu: 4,
language: 'en-US',
languageBaseIp: true,
uiLanguage: 'en-US',
uiLanguageBaseIp: true,
geolocationBaseIp: true,
lng: '116.397128',
lat: '39.916527',
timezone: 'Europe/Amsterdam',
timezoneBaseIp: true,
hardwareAcceleration: true,
disableSandbox: false,
startupParams: '',
deviceMedia: false,
deviceName: 'DESKTOP-ABCD',
randomFingerprint: false,
blockLargeImages: false,
maxImageKB: 300,
syncCookies: false
},
startInfo: {
startPage: {
mode: 'custom',
value: ['https://www.baidu.com']
},
otherConfig: {
openConfigPage: false,
checkPage: true,
extensionTab: true
}
}
})
})
const result = await response.json()
return result
}import requests
def create_browser():
url = "http://127.0.0.1:50326/api/browser/create"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"browserName": "Facebook营销环境",
"groupId": 1,
"proxy": {
"protocol": "socks5",
"host": "proxy.example.com",
"port": 1080,
"username": "user123",
"password": "pass123",
},
"fingerprint": {
"os": "Windows",
"platformVersion": 11,
"kernel": "135",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.9.2537 Safari/537.36",
"canvas": True,
"audioContext": True,
"speechVoices": True,
"clientRects": True,
"resolution": "1920x1080",
"windowWidth": 1000,
"windowHeight": 1000,
"ram": 8,
"cpu": 4,
"language": "en-US",
"languageBaseIp": True,
"uiLanguage": "en-US",
"uiLanguageBaseIp": True,
"geolocationBaseIp": True,
"lng": "116.397128",
"lat": "39.916527",
"timezone": "Europe/Amsterdam",
"timezoneBaseIp": True,
"hardwareAcceleration": True,
"disableSandbox": False,
"startupParams": "",
"deviceMedia": False,
"deviceName": "DESKTOP-ABCD",
"randomFingerprint": False,
"blockLargeImages": False,
"maxImageKB": 300,
"syncCookies": False
},
"startInfo": {
"startPage": {
"mode": "custom",
"value": [
"https://www.baidu.com"
]
},
"otherConfig": {
"openConfigPage": False,
"checkPage": True,
"extensionTab": True
}
}
}
response = requests.post(url, headers=headers, json=data)
return response.json()请求参数结构
{
"browserName": "string", // 环境名称(必填)
"groupId": "number", // 分组 ID(可选)
"remark": "string", // 备注信息(可选)
"proxy": { ... }, // 代理配置
"fingerprint": { ... }, // 指纹配置
"startInfo": { ... }, // 启动配置
"Cookie": [...] // 预设 Cookie
}移动端环境创建示例
创建 Android 或 iOS 移动端浏览器环境:
curl -X POST http://127.0.0.1:50326/api/browser/create \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"browserName": "测试环境",
"fingerprint": {
"os": "Android",
"mobileDeviceId": 2
}
}'const response = await fetch('/api/browser/create', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
browserName: '测试环境',
fingerprint: {
os: 'Android',
mobileDeviceId: 2
}
})
})
const data = await response.json()import requests
response = requests.post(
'http://127.0.0.1:50326/api/browser/create',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'browserName': '测试环境',
'fingerprint': {
'os': 'Android',
'mobileDeviceId': 2
}
}
)
print(response.json())移动端环境说明: mobileDeviceId 对应 /api/browser/mobile-devices 接口返回的设备 id • 仅当 os 为 Android 或 iOS 时 mobileDeviceId 才生效 • 如果不传 mobileDeviceId,系统会根据 os 随机选择一个移动设备
详细参数说明
基础信息
| 参数 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
browserName | string | 是 | 环境名称,建议使用有意义的名称 | "Facebook-营销账号1" |
groupId | number | 否 | 分组 ID,用于环境分类管理 | 1 |
remark | string | 否 | 备注信息,最大 256 字符 | "主要用于Facebook广告投放" |
代理配置 proxy
| 参数 | 类型 | 必填 | 说明 | 可选值 |
|---|---|---|---|---|
protocol | string | 是 | 代理协议 | http, socks5, direct |
host | string | 是* | 服务器地址 | "proxy.example.com" |
port | number | 是* | 端口 | 1080, 8080 |
username | string | 否 | 用户名 | "user123" |
password | string | 否 | 密码 | "pass123" |
timezone | string | 否 | 时区 | "America/New_York" |
proxyId | number | 否 | 已存在代理 ID | 1001 |
代理配置说明: 使用 proxyId 时,可省略其他代理参数(protocol、host、port 等)• direct 协议表示不使用代理,直接连接 • 时区建议与代理 IP 地理位置匹配,提高匿名性 • 当使用 http 或 socks5 协议时,host 和 port 为必填项 • 如果代理需要认证,请填写 username 和 password
指纹配置 fingerprint
| 参数 | 类型 | 必填 | 说明 | 可选值 |
|---|---|---|---|---|
os | string | 是 | 操作系统 | Windows, macOS, Android, iOS |
mobileDeviceId | number | 否 | 移动设备 ID | 通过 /api/browser/mobile-devices 接口获取,仅 os 为 Android 或 iOS 时生效 |
platformVersion | number | 否 | 系统版本 | Windows: 11, 10; macOS: 11, 10; Android: 12, 11, 10; iOS: 16, 15 |
kernel | string | 否 | 内核版本 | "135" (Chrome 版本) |
userAgent | string | 否 | 用户代理 | 自动生成或自定义 |
webrtc | string | 否 | WebRTC 策略 | disable, replace, real |
resolution | string | 否 | 屏幕分辨率 | "1920x1080", "1366x768" |
windowWidth | number | 否 | 窗口宽度 | 1000 (默认值) |
windowHeight | number | 否 | 窗口高度 | 1000 (默认值) |
language | string | 否 | 语言 | "en-US", "zh-CN" |
languageBaseIp | boolean | 否 | 基于 IP 语言 | true, false |
uiLanguage | string | 否 | UI 语言 | "en-US", "zh-CN" |
uiLanguageBaseIp | boolean | 否 | 基于 IP UI 语言 | true, false |
timezone | string | 否 | 时区 | "Asia/Shanghai" |
timezoneBaseIp | boolean | 否 | 基于 IP 时区 | true, false |
geolocationBaseIp | boolean | 否 | 基于 IP 地理位置 | true, false |
lng | string | 否 | 经度 | "116.397128" |
lat | string | 否 | 纬度 | "39.916527" |
canvas | boolean | 否 | Canvas 指纹 | true(开启随机), false(真实), 默认 true |
audioContext | boolean | 否 | AudioContext 指纹 | true(随机), false(真实), 默认 true |
speechVoices | boolean | 否 | SpeechVoices 指纹 | true(随机), false(真实), 默认 true |
clientRects | boolean | 否 | ClientRects 指纹 | true(随机), false(真实), 默认 true |
fonts | array | 否 | 字体列表 | ["Arial", "Times New Roman"] |
disableTLS | array | 否 | 禁用的 TLS 版本 | [] |
ram | number | 否 | 内存 (GB) | 2, 4, 8, 16 |
cpu | number | 否 | CPU 核心数 | 2, 4, 8 |
hardwareAcceleration | boolean | 否 | 硬件加速 | true(开启), false(关闭), 默认 true |
disableSandbox | boolean | 否 | 禁用沙盒 | true(开启), false(关闭), 默认 false |
startupParams | string | 否 | 启动参数 | "" |
deviceName | string | 否 | 设备名称 | "DESKTOP-ABCD" |
deviceMedia | boolean | 否 | 设备媒体 | true(随机), false(关闭), 默认 true |
portScanProtection | string | 否 | 端口防护 | "" (格式:端口,端口) |
randomFingerprint | boolean | 否 | 随机指纹 | true(开启), false(关闭), 默认 true |
blockLargeImages | boolean | 否 | 阻止大图片 | true(开启), false(关闭), 默认 false |
maxImageKB | number | 否 | 最大图片大小 (KB) | 默认 300 |
syncCookies | boolean | 否 | 同步 Cookie | true(开启), false(关闭), 默认 false |
clearCacheOnStart | boolean | 否 | 启动前清理缓存 | true(开启), false(关闭), 默认 false |
clearCachePreserveExtensionsOnStart | boolean | 否 | 启动前清理缓存(保留扩展) | true(开启), false(关闭), 默认 false |
clearCookiesOnStart | boolean | 否 | 启动前清理 Cookies | true(开启), false(关闭), 默认 false |
clearHistoryOnStart | boolean | 否 | 启动前清理历史记录 | true(开启), false(关闭), 默认 false |
disableMediaAutoplay | boolean | 否 | 禁用媒体自动播放 | true(开启), false(关闭), 默认 false |
muteAllMedia | boolean | 否 | 静音所有媒体 | true(开启), false(关闭), 默认 false |
disableGoogleTranslate | boolean | 否 | 禁用 Google 翻译 | true(开启), false(关闭), 默认 false |
disableSavePasswordPrompt | boolean | 否 | 禁用保存密码提示 | true(开启), false(关闭), 默认 false |
disableNotifications | boolean | 否 | 禁用通知 | true(开启), false(关闭), 默认 false |
blockClipboardRead | boolean | 否 | 阻止网页读取剪贴板 | true(开启), false(关闭), 默认 false |
stopOnNetworkIssue | boolean | 否 | 网络异常时停止 | true(开启), false(关闭), 默认 false |
stopOnIPChange | boolean | 否 | IP 变更时停止 | true(开启), false(关闭), 默认 false |
stopOnCountryChange | boolean | 否 | 国家/地区变更时停止 | true(开启), false(关闭), 默认 false |
指纹配置注意事项: 建议使用常见的参数组合,避免过于独特的配置 • 确保操作系统、浏览器版本、用户代理三者匹配 • Canvas、AudioContext、SpeechVoices、ClientRects 干扰有助于提高匿名性,但可能影响某些网站功能 • 当 geolocationBaseIp 为 false 时,需要手动设置 lng 和 lat 参数 • deviceMedia 设置为 true 时,会随机化设备媒体信息,提高匿名性 • mobileDeviceId 仅在 os 为 Android 或 iOS 时生效,不传则系统随机选择移动设备
响应数据
{
"success": true,
"message": "环境创建成功",
"data": {
"envId": 5880,
"userIndex":123
}
}3. 更新浏览器环境
更新现有浏览器环境的配置信息。
环境更新说明: 可以更新环境的指纹配置、代理设置、启动参数等 • 更新操作不会影响已保存的 Cookie 和本地存储数据 • 如果环境正在运行,更新后需要重启环境才能生效 • 使用 proxyId 可以快速切换代理,无需重新配置代理参数
请求头
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json请求体
{
"envId": 1000,
"browserName": "TestBrowser", // 浏览器环境名称
"proxy": {
"protocol": "socks5", // 代理协议(http/socks5/direct 等)新建代理
"host": "108.165.69.97", // 代理主机名(http/socks5 时须填写)
"port": 6059, // 代理端口(http/socks5 时须填写)
"username": "hygwueis", // 代理用户名(http/socks5 时须填写)
"password": "lc6bb3zfm359", // 代理密码(http/socks5 时须填写)
// "timezone": "Europe/Amsterdam", // 时区(例如:`Asia/Shanghai`)
"ipChecker": "https://ipinfo.io", // IP 检查地址
// 当 proxyId 为空时,新建代理
"proxyId": 1000
},
"fingerprint": {
"os": "Windows", // 操作系统 Windows、macOS、iOS、Android
"platformVersion": 11, // 系统版本:Windows 的值:11、10;macOS 的值:11、10;Android 的值:12、11、10;iOS 的值:16、15;int 类型,非必传,默认取最大值
"kernel": "135", // 内核版本(Chrome 版本)
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.9.2537 Safari/537.36", // 用户代理字符串
"canvas": true, // Canvas 指纹(true 开启随机,false 真实,默认 true)
"audioContext": true, // AudioContext 指纹(true 随机,false 真实,默认 true)
"speechVoices": true, // SpeechVoices 指纹(true 随机,false 真实,默认 true)
"clientRects": true, // ClientRects 指纹(true 随机,false 真实,默认 true)
"fonts": ["Arial", "Courier New"], // 字体
"disableTLS": [], // 禁用的 TLS 版本列表 [{ label: 'TLS_AES_128_GCM_SHA256', value: '0x1301', }, { label: 'TLS_AES_256_GCM_SHA384', value: '0x1302', }, { label: 'TLS_AES_128_CCM_8_SHA256', value: '0x1305', }, { label: 'TLS_AES_128_CCM_SHA256', value: '0x1304', }, { label: 'TLS_RSA_WITH_AES_128_CBC_SHA', value: '0x002f', }, { label: 'TLS_DHE_RSA_WITH_AES_128_CBC_SHA', value: '0x0033', }, {label: 'TLS_RSA_WITH_AES_256_CBC_SHA', value: '0x0035', }, { label: 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA', value: '0x0039', }, { label: 'TLS_RSA_WITH_AES_128_CBC_SHA256', value: '0x003C', }, {label: 'TLS_RSA_WITH_AES_256_CBC_SHA256', value: '0x003D', }, { label: 'TLS_DHE_RSA_WITH_AES_128_CBC_SHA256', value: '0x0067', }, { label: 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA256', value: '0x006B', }, { label: 'TLS_RSA_WITH_AES_128_GCM_SHA256', value: '0x009C', }, {label: 'TLS_RSA_WITH_AES_256_GCM_SHA384', value: '0x009D', }, { label: 'TLS_DHE_RSA_WITH_AES_128_GCM_SHA256', value: '0x009E', }, { label: 'TLS_DHE_RSA_WITH_AES_256_GCM_SHA384', value: '0x009F', }, { label: 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA', value: '0xc009', }, { label: 'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA', value: '0xc00a', }, { label: 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA', value: '0xc013', }, { label: 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA', value: '0xc014', }, { label: 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA', value: '0xc013', }, { label: 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA', value: '0xc014', }, { label: 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256',value: '0xC023',}, { label: 'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384', value: '0xC024', },
"resolution": "1920x1080", // 屏幕分辨率(例如:['1920x1080','1000x1080','1366x768','1536x864','1440x900','1280x720','1600x900'])
"windowWidth": 1000, // 窗口宽度(默认 1000)
"windowHeight": 1000, // 窗口高度(默认 1000)
"ram": 8, // 分配的内存 [2,4,8]
"cpu": 4, // 分配的 CPU 核心数 [1,2,4,8]
"language": "en-US", // 语言
"languageBaseIp": true, // 语言是否基于 IP
"timezone": "Europe/Amsterdam", // 时区
"timezoneBaseIp": true, // 时区是否基于 IP
"geolocationBaseIp": true, // 地理位置是否基于 IP
"lng": "116.397128", // 经度(当 geolocationBaseIp 为 false 时使用)
"lat": "39.916527", // 纬度(当 geolocationBaseIp 为 false 时使用)
"hardwareAcceleration": true, // 硬件加速
"disableSandbox": false, // 禁用沙盒
"startupParams": "", // 自定义启动参数
"deviceName": "DESKTOP-ABCD", // 设备名称
"deviceMedia": false, // 设备媒体
"portScanProtection": "80,443", // 端口扫描防护
"randomFingerprint": false,
"blockLargeImages": false,
"maxImageKB": 300,
"syncCookies": false
},
"groupId": 29, // 分组 ID
"remark": "备注", // 备注
"Cookie": [], // Cookie
"startInfo": {
"startPage": {
"mode": "custom", // 启动页模式
"value": ["https://www.google.com", "https://www.bing.com"] // 启动页 ["https://www.google.com", "https://www.bing.com"]
},
"otherConfig": {
"openConfigPage": true, // 是否打开配置页
"checkPage": true, // 是否打开检查页
"extensionTab": true // 是否打开扩展标签页
}
}
}移动端环境更新示例
更新环境的移动设备型号:
curl -X POST http://127.0.0.1:50326/api/browser/update \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"envId": 123,
"fingerprint": {
"mobileDeviceId": 2
}
}'const response = await fetch('/api/browser/update', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
envId: 123,
fingerprint: {
mobileDeviceId: 2
}
})
})
const data = await response.json()import requests
response = requests.post(
'http://127.0.0.1:50326/api/browser/update',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'envId': 123,
'fingerprint': {
'mobileDeviceId': 2
}
}
)
print(response.json())参数说明
基础参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
envId | number | 是 | 浏览器环境 ID |
browserName | string | 是 | 浏览器环境名称 |
代理设置 proxy
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
protocol | string | 当 proxyId 为空必填 | 代理协议(http/socks5/direct 等) |
host | string | 否 | 主机名(http/socks5 时须填写) |
port | number | 否 | 端口(http/socks5 时须填写) |
username | string | 否 | 用户名(http/socks5 时须填写) |
password | string | 否 | 密码(http/socks5 时须填写) |
timezone | string | 否 | 时区(例如:Asia/Shanghai),不填则根据 IP |
ipChecker | string | 否 | IP 检查渠道 |
已有代理设置 proxyId
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
proxyId | number | 当 proxy 为空必填 | 使用已有代理 |
分组设置 groupId
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
groupId | number | 否 | 设置存在分组 |
备注设置 remark
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
remark | string | 否 | 设置备注 |
Cookie 设置 Cookie
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
Cookie | json | 否 | 设置 Cookie |
启动页设置 startInfo
| 参数 | 类型 | 必填 | 说明 | 示例值 |
|---|---|---|---|---|
startPage.mode | string | 否 | 启动页模式 | custom 自定义,last 最后一次, none 无 |
startPage.value | array | 否 | 启动页地址 | 当 mode 为 custom 时,["https://www.google.com"];当 mode 为 last 时,[];当 mode 为 none 时,[] |
otherConfig.openConfigPage | boolean | 否 | 打开配置页 | true 打开,false 关闭 |
otherConfig.checkPage | boolean | 否 | 打开检查页 | true 打开,false 关闭 |
otherConfig.extensionTab | boolean | 否 | 打开扩展标签页 | true 打开,false 关闭 |
指纹设置 fingerprint
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
os | string | 否 | 操作系统 |
mobileDeviceId | number | 否 | 移动设备 ID,通过 /api/browser/mobile-devices 获取,仅 os 为 Android/iOS 时生效 |
platformVersion | number | 否 | 系统版本 |
kernel | string | 否 | 内核版本 |
userAgent | string | 否 | 用户代理 |
webrtc | string | 否 | WebRTC (可选:disable、replace、real) |
timezone | string | 否 | 时区 |
timezoneBaseIp | boolean | 否 | 时区基于 IP |
language | string | 否 | 语言 |
languageBaseIp | boolean | 否 | 语言基于 IP |
uiLanguage | string | 否 | UI 语言 |
uiLanguageBaseIp | boolean | 否 | UI 语言基于 IP |
geolocationBaseIp | boolean | 否 | 地理位置基于 IP |
lng | string | 否 | 经度 |
lat | string | 否 | 纬度 |
disableSandbox | boolean | 否 | 禁用沙盒(true 开启,false 关闭,默认 false) |
startupParams | string | 否 | 启动参数 |
canvas | boolean | 否 | Canvas 指纹(true 开启随机,false 真实,默认 true) |
audioContext | boolean | 否 | AudioContext 指纹(true 随机,false 真实,默认 true) |
speechVoices | boolean | 否 | SpeechVoices 指纹(true 随机,false 真实,默认 true) |
clientRects | boolean | 否 | ClientRects 指纹(true 随机,false 真实,默认 true) |
fonts | array | 否 | 字体列表 |
disableTLS | array | 否 | 禁用的 TLS 版本 |
resolution | string | 否 | 屏幕分辨率(例如:1920x1080) |
windowWidth | number | 否 | 窗口宽度(默认 1000) |
windowHeight | number | 否 | 窗口高度(默认 1000) |
ram | number | 否 | 内存 |
cpu | number | 否 | CPU 核心数 |
deviceName | string | 否 | 设备名称 |
deviceMedia | boolean | 否 | 设备媒体 (true 随机,false 关闭,默认 true) |
portScanProtection | string | 否 | 端口扫描防护(默认关闭,格式:端口,端口) |
hardwareAcceleration | boolean | 否 | 硬件加速(true 开启,false 关闭,默认 true) |
randomFingerprint | boolean | 否 | 随机指纹(true 开启,false 关闭,默认 true) |
blockLargeImages | boolean | 否 | 阻止大图片(true 开启,false 关闭,默认 false) |
maxImageKB | number | 否 | 最大图片大小(KB)(默认 300) |
syncCookies | boolean | 否 | 同步 Cookie(true 开启,false 关闭,默认 false) |
clearCacheOnStart | boolean | 否 | 启动前清理缓存(true 开启,false 关闭,默认 false) |
clearCachePreserveExtensionsOnStart | boolean | 否 | 启动前清理缓存(保留扩展)(true 开启,false 关闭,默认 false) |
clearCookiesOnStart | boolean | 否 | 启动前清理 Cookies(true 开启,false 关闭,默认 false) |
clearHistoryOnStart | boolean | 否 | 启动前清理历史记录(true 开启,false 关闭,默认 false) |
disableMediaAutoplay | boolean | 否 | 禁用媒体自动播放(true 开启,false 关闭,默认 false) |
muteAllMedia | boolean | 否 | 静音所有媒体(true 开启,false 关闭,默认 false) |
disableGoogleTranslate | boolean | 否 | 禁用 Google 翻译(true 开启,false 关闭,默认 false) |
disableSavePasswordPrompt | boolean | 否 | 禁用保存密码提示(true 开启,false 关闭,默认 false) |
disableNotifications | boolean | 否 | 禁用通知(true 开启,false 关闭,默认 false) |
blockClipboardRead | boolean | 否 | 阻止网页读取剪贴板(true 开启,false 关闭,默认 false) |
stopOnNetworkIssue | boolean | 否 | 网络异常时停止(true 开启,false 关闭,默认 false) |
stopOnIPChange | boolean | 否 | IP 变更时停止(true 开启,false 关闭,默认 false) |
stopOnCountryChange | boolean | 否 | 国家/地区变更时停止(true 开启,false 关闭,默认 false) |
返回示例
{
"success": true,
"data": {
"envId": 5880
},
"message": "成功"
}4. 启动浏览器环境
启动指定的浏览器环境,返回 WebSocket 连接信息。
启动说明: 启动成功后会返回 WebSocket 连接地址(ws)和 HTTP 调试接口地址(http)• 可以通过返回的 ws 地址连接 Chrome DevTools Protocol (CDP) 进行自动化操作 • 可以通过返回的 http 地址获取浏览器版本信息 • 使用 args 参数可以传递额外的浏览器启动参数(如 --headless)• 使用 port 参数可以指定自定义的远程调试端口
请求示例
curl -X POST http://127.0.0.1:50326/api/browser/start \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"envId": 901,
"args": ["--headless"],
"port": 1111
}'curl -X POST http://127.0.0.1:50326/api/browser/start \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userIndex": 1,
"args": ["--headless"],
"port": 1111
}'const response = await fetch('/api/browser/start', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
envId: 901,
args: ['--headless'],
port: 1111
})
})
const data = await response.json()
console.log(data)const response = await fetch('/api/browser/start', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
userIndex: 1,
args: ['--headless'],
port: 1111
})
})
const data = await response.json()
console.log(data)import requests
url = "http://127.0.0.1:50326/api/browser/start"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"envId": 901,
"args": ["--headless"],
"port": 1111
}
response = requests.post(url, headers=headers, json=data)
print(response.json())import requests
url = "http://127.0.0.1:50326/api/browser/start"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"userIndex": 1,
"args": ["--headless"],
"port": 1111
}
response = requests.post(url, headers=headers, json=data)
print(response.json())参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
envId | number | 二选一必填 | 环境 ID(与 userIndex 二选一) |
userIndex | number | 二选一必填 | 环境序号(与 envId 二选一) |
args | string[] | 否 | 浏览器参数 |
port | number | 否 | 自定义远程端口 |
返回示例
{
"success": true,
"data": {
"envId": 900,
"browserName": "11",
"ws": "ws://127.0.0.1:34721/devtools/browser/33cc3bf7-1852-409f-ad3e-364f6233d735",
"driver": "C://User/xxxxx/chromedriver.exe", // 1.0.1版本支持
"http": "http://127.0.0.1:34721/json/version",
"pid": 32512,
"port": 34721,
"userIndex": 1
},
"message": "成功"
}5. 停止浏览器环境
停止正在运行的浏览器环境。
请求示例
curl -X POST http://127.0.0.1:50326/api/browser/stop \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"envId": 900
}'curl -X POST http://127.0.0.1:50326/api/browser/stop \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userIndex": 1
}'const response = await fetch('/api/browser/stop', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
envId: 900
})
})
const data = await response.json()
console.log(data)const response = await fetch('/api/browser/stop', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
userIndex: 1
})
})
const data = await response.json()
console.log(data)import requests
url = "http://127.0.0.1:50326/api/browser/stop"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"envId": 900
}
response = requests.post(url, headers=headers, json=data)
print(response.json())import requests
url = "http://127.0.0.1:50326/api/browser/stop"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"userIndex": 1
}
response = requests.post(url, headers=headers, json=data)
print(response.json())参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
envId | number | 二选一必填 | 环境 ID(与 userIndex 二选一) |
userIndex | number | 二选一必填 | 环境序号(与 envId 二选一) |
返回示例
{
"success": true,
"data": {
"envId": 900
},
"message": "成功"
}6. 停止所有浏览器环境
停止所有正在运行的浏览器环境。
请求示例
curl -X POST http://127.0.0.1:50326/api/browser/stop-all \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"const response = await fetch('/api/browser/stop-all', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
})
const data = await response.json()
console.log(data)import requests
url = "http://127.0.0.1:50326/api/browser/stop-all"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
response = requests.post(url, headers=headers)
print(response.json())参数说明
无需请求参数
返回示例
成功响应:
{
"success": true,
"data": {
"total": 10,
"closed": 8,
"failed": 2
},
"message": "成功"
}失败响应:
{
"success": false,
"message": "错误消息"
}7. 删除浏览器环境
删除指定的浏览器环境及其相关数据。
请求示例
curl -X POST http://127.0.0.1:50326/api/browser/delete \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"envId": 911
}'curl -X POST http://127.0.0.1:50326/api/browser/delete \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userIndex": 1
}'const response = await fetch('/api/browser/delete', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
envId: 911
})
})
const data = await response.json()
console.log(data)const response = await fetch('/api/browser/delete', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
userIndex: 1
})
})
const data = await response.json()
console.log(data)import requests
url = "http://127.0.0.1:50326/api/browser/delete"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"envId": 911
}
response = requests.post(url, headers=headers, json=data)
print(response.json())import requests
url = "http://127.0.0.1:50326/api/browser/delete"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"userIndex": 1
}
response = requests.post(url, headers=headers, json=data)
print(response.json())参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
envId | number | 二选一必填 | 环境 ID(与 userIndex 二选一) |
userIndex | number | 二选一必填 | 环境序号(与 envId 二选一) |
返回示例
{
"success": true,
"data": 911,
"message": "成功"
}7. 删除浏览器环境缓存
清理指定环境的缓存数据,包括 Cookie、本地存储等。
请求示例
curl -X POST http://127.0.0.1:50326/api/browser/cache/delete \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type": "application/json" \
-d '{
"envId": 900
}'curl -X POST http://127.0.0.1:50326/api/browser/cache/delete \
-H "Authorization": Bearer YOUR_API_KEY" \
-H "Content-Type": "application/json" \
-d '{
"userIndex": 1
}'const response = await fetch('/api/browser/cache/delete', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
envId: 900
})
})
const data = await response.json()
console.log(data)const response = await fetch('/api/browser/cache/delete', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
userIndex: 1
})
})
const data = await response.json()
console.log(data)import requests
url = "http://127.0.0.1:50326/api/browser/cache/delete"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"envId": 900
}
response = requests.post(url, headers=headers, json=data)
print(response.json())import requests
url = "http://127.0.0.1:50326/api/browser/cache/delete"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"userIndex": 1
}
response = requests.post(url, headers=headers, json=data)
print(response.json())参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
envId | number | 二选一必填 | 环境 ID(与 userIndex 二选一) |
userIndex | number | 二选一必填 | 环境序号(与 envId 二选一) |
返回示例
{
"success": true,
"data": 900,
"message": "成功"
}8. 批量删除浏览器环境缓存
批量删除指定环境的本地浏览器缓存数据,支持一次性清理多个环境的缓存。
请求示例
curl -X POST http://127.0.0.1:50326/api/browser/batch/delete-cache \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"envIds": [1, 2, 3, 4, 5]
}'curl -X POST http://127.0.0.1:50326/api/browser/batch/delete-cache \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userIndexes": [1, 2, 3, 4, 5]
}'const response = await fetch('/api/browser/batch/delete-cache', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
envIds: [1, 2, 3, 4, 5]
})
})
const data = await response.json()
console.log(data)const response = await fetch('/api/browser/batch/delete-cache', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
userIndexes: [1, 2, 3, 4, 5]
})
})
const data = await response.json()
console.log(data)import requests
url = "http://127.0.0.1:50326/api/browser/batch/delete-cache"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"envIds": [1, 2, 3, 4, 5]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())import requests
url = "http://127.0.0.1:50326/api/browser/batch/delete-cache"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"userIndexes": [1, 2, 3, 4, 5]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
envIds | number[] | 二选一必填 | 环境 ID 数组(与 userIndexes 二选一) |
userIndexes | number[] | 二选一必填 | 环境序号数组(与 envIds 二选一) |
参数验证: envIds 或 userIndexes 不能为空数组 • 数组中的每个元素必须是正整数 • 如果某些环境 ID 或序号不存在,会在响应中标记为失败
成功响应示例
{
"success": true,
"data": {
"total": 5,
"success": 5,
"failed": 0,
"failedEnvIds": []
},
"message": "批量删除缓存成功"
}部分成功响应示例
{
"success": true,
"data": {
"total": 5,
"success": 4,
"failed": 1,
"failedEnvIds": ["3"]
},
"message": "部分缓存删除成功,1 个环境删除失败"
}响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
total | number | 总数 |
success | number | 成功删除的数量 |
failed | number | 失败的数量 |
failedEnvIds | string[] | 失败的环境 ID 列表 |
错误响应
| HTTP 状态 | 说明 |
|---|---|
400 | 参数错误(envIds 缺失、不是数组、为空或包含无效 ID) |
404 | 没有找到有效的环境 |
500 | 服务器内部错误 |
9. 获取环境列表
获取当前用户所有的浏览器环境列表,支持分页查询。
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
current | number | 否 | 1 | 当前页 |
pageSize | number | 否 | 20 | 每页数量 |
keyword | string | 否 | - | 搜索关键词 |
groupId | number | 否 | - | 分组 ID |
请求示例
curl -X GET "http://127.0.0.1:50326/api/browser/list?current=1&pageSize=20&keyword=test" \
-H "Authorization: Bearer YOUR_API_KEY"const params = new URLSearchParams({
current: 1,
pageSize: 20,
keyword: 'test'
})
const response = await fetch(`/api/browser/list?${params}`, {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY'
}
})
const data = await response.json()
console.log(data)import requests
url = "http://127.0.0.1:50326/api/browser/list"
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
params = {
"current": 1,
"pageSize": 20,
"keyword": "test"
}
response = requests.get(url, headers=headers, params=params)
print(response.json())返回示例 (具体看最新的返回)
{
"success": true,
"data": {
"total": 1001,
"current": 1,
"pageSize": 1,
"list": [
{
"userIndex": 2,
"profileId": "c767c4455071401e8c69fcd35b83fee0",
"browserName": "111",
"startInfo": {
"startPage": [],
"otherConfig": {
"checkPage": true,
"openConfigPage": true
}
},
"accountInfo": [
{
"twofa": "",
"account": "",
"password": "",
"security": true
}
],
"remark": null,
"cookie": "[{\"name\":\"NID\",\"value\":\"524=J62ojXztsmVdRN15JnjHZ1uKkZk03CqKGT6nv3MIzANjsX0yINK8LQjn9mwVFsrQLoIWZtcXH2N1WOrPA6vviGFZ2tz1DiloBntJnEPHNcElzIpUETTOBc00zsE9H9vZ9nBN1PbWbzplZMcvsKIf6TFYuoDZR8jW0yt1dRE_Vvu3cJ6mjQofbrTkX4adp3Evcg\",\"domain\":\".google.com\",\"path\":\"/\",\"expires\":1766503236,\"httpOnly\":true,\"secure\":true},{\"name\":\"acw_tc\",\"value\":\"1a16d61617506920127867097e1e8b766176dd649c824bb6961f76bffbd1a1\",\"domain\":\"wallet.ouxyi.cash\",\"path\":\"/\",\"expires\":1750693812,\"httpOnly\":true,\"secure\":false},{\"name\":\"__cf_bm\",\"value\":\"MpIJ9kyO3Y6bYsdWvosuv5YailhJ2NuXH9sfTn3R9U0-1750692605-1.0.1.1-hhzLUZ08o0q9t..yWgfC6pITz7OcOn.xQZNnQOaOyrI1e0HS1VuKfSFXyjQuSFZrfgTsC7JhIs.fJqlE.yfh8cZA6e4NhzwCj4efRKcxuC8\",\"domain\":\".okx-doh.com\",\"path\":\"/\",\"expires\":1750694404,\"httpOnly\":true,\"secure\":true},{\"name\":\"__cf_bm\",\"value\":\"NhdZ2_OAm9tyNium8NNVkZoOwSi1RHma6zRT2QeJ.d8-1750692976-1.0.1.1-q23Ow3e6CH6mnv6KJHLV8pE.21iKURpI1wltPnyXz11B7x5uZ2oB0jWPr5npR5BI0pO6AKV3A8Ao_mI9J_qUG4gy0Z9s7CorUa_9MLPY5YU\",\"domain\":\".okx.ac\",\"path\":\"/\",\"expires\":1750694775,\"httpOnly\":true,\"secure\":true},{\"name\":\"__cf_bm\",\"value\":\"d_H1JMrnKDsQXndxuXXFJLrqwhkexDTUbQxwwGDe0.g-1750693587-1.0.1.1-UjLo8PwvZmAfFL_mJgNXJHaysx.z5iSYtJs5VvELw2GMf078o5kPT7ZM9Nvb8FNLxMku6evcafgP.dZ_4teztEztPJChMcHSttA5nhsw_Gk\",\"domain\":\".okex.org\",\"path\":\"/\",\"expires\":1750695386,\"httpOnly\":true,\"secure\":true},{\"name\":\"__cf_bm\",\"value\":\"6819NtbBrV7Grq_hvrmzxu64cVaPAOVoAUjgVr5REVc-1750693587-1.0.1.1-EMWNB1c94XJnij_xsDOYMcXmYTg1BCQAxoRmi4HgPueSBsHBT3D4e3rvsckERtmMz9bCoi8kHb6a0I.cbI0ub0AooK9z6FSW3AQwfVyBEPA\",\"domain\":\".okx-httpdns.com\",\"path\":\"/\",\"expires\":1750695386,\"httpOnly\":true,\"secure\":true},{\"name\":\"__cf_bm\",\"value\":\"Kxf0ZwNSPAgpYMl5HKpzmNPabhmwqr99ICPcsIS4xe4-1750693588-1.0.1.1-IqCN4caOphkqcWHSyWFopiUhvmGvfHdJUs..6Ci8sUz8swXfdsYYuGonOdBpWFG_ZbmQW6MDoKF430f54caM53LLCVeM8CEtbsvlxyzKh50\",\"domain\":\".okx.com\",\"path\":\"/\",\"expires\":1750695388,\"httpOnly\":true,\"secure\":true}]",
"status": 1,
"createTime": "2025-06-23T15:19:50.000Z",
"updateTime": "2025-06-23T16:00:51.000Z",
"lastOpenedTime": null,
"userId": 20,
"proxyId": 55524,
"isDeleted": false,
"deleteTime": null,
"teamId": 19,
"groupId": null,
"syncFile": null,
"tags": [],
"proxy": {
"id": 55524,
"userIndex": 1016,
"address": "socks5://107.174.25.53:5507",
"protocol": "socks5",
"host": "107.174.25.53",
"port": 5507,
"username": "xxxx",
"password": "xxxx",
"timezone": "America/Chicago",
"realIp": "107.174.25.53",
"lastIp": null,
"lastCheckedTime": "2025-06-23T16:00:46.000Z",
"ipChecker": "https://iprust.io/ip.json",
"ipChangeAction": null,
"status": 2,
"remark": null,
"createdTime": "2025-06-23T16:00:50.000Z",
"updatedTime": "2025-06-23T16:00:50.000Z",
"userId": 20,
"teamId": 19,
"isDeleted": false,
"groupId": null
},
"group": null,
"fingerprint": {
"os": "Windows",
"cpu": 2,
"ram": 2,
"seed": 4946,
"fonts": "Liberation Sans Narrow,Liberation Sans Narrow,Javanese Text Regular,AR PL UKai CN,Proxy 1,Avenir Next,Noto Sans Cypriot,Avenir Black,SimSun-ExtB Regular,Kohinoor Gujarati,Segoe MDL2 Assets,Sinhala Sangam MN,Gabriola Regular,EUROSTILE,DengXian Light,Century Schoolbook,Heiti TC,Hiragino Sans W4,Segoe MDL2 Assets,Hiragino Sans W9,cursive,Avenir Black,PT Serif,Segoe UI Black,Forte,Kristen ITC,Mallanna,Garamond,Hiragino Mincho ProN,Arial Hebrew,Javanese Text Regular,PT Serif",
"webgl": {
"glRender": "Intel(R) HD Graphics 3000 Direct3D11 vs_4_1 ps_4_1, D3D11-23.21.13.8857",
"glVendor": "Intel"
},
"canvas": true,
"kernel": "135",
"webgpu": {
"gpuArch": "gen-12lp",
"gpuVendor": "intel"
},
"webrtc": "disable",
"battery": true,
"browser": "chrome",
"language": "en-US",
"bluetooth": true,
"isEncrypt": false,
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.60.2288 Safari/537.36",
"deviceName": "DESKTOP-0NCRDDBI",
"disableTLS": [],
"doNotTrack": false,
"resolution": "1000x1080",
"uiLanguage": "en-US",
"clientRects": true,
"audioContext": true,
"speechVoices": true,
"startupParams": "",
"disableSandbox": false,
"timezoneBaseIp": true,
"platformVersion": 11,
"portScanProtection": "",
"hardwareAcceleration": false,
"randomFingerprint": false,
"blockLargeImages": false,
"maxImageKB": 300,
"syncCookies": false
},
"envId": 29286
}
]
},
"message": "成功"
}10. 获取单个环境详情
获取指定浏览器环境的详细信息,包括完整的指纹配置、代理信息等。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
envId | number | 否 | 环境 ID (与 userIndex 二选一) |
userIndex | number | 否 | 用户索引 (与 envId 二选一) |
注意:
envId和userIndex两个参数必须提供其中一个。
请求示例
curl -X POST "http://127.0.0.1:50326/api/browser/detail" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"envId": 346949}'const response = await fetch('/api/browser/detail', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
envId: 346949
// 或使用 userIndex: 139
})
})
const data = await response.json()
console.log(data)import requests
url = "http://127.0.0.1:50326/api/browser/detail"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"envId": 346949
# 或使用 "userIndex": 139
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())返回示例
{
"success": true,
"data": {
"userIndex": 139,
"browserName": "bbbb",
"profileId": "63683626902c49369d5aa43471493396",
"fingerprint": {
"disableImages": false,
"randomFingerprint": false,
"syncCookies": true,
"os": "Windows",
"platformVersion": "15.0.0",
"kernel": "143",
"browser": "chrome",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.72.1064 Safari/537.36",
"proxyType": "socks5",
"proxyHost": "148.113.187.209",
"proxyUsername": "com61163829-res-any-sid-905375838",
"proxyPassword": "Bf1GCSgF162QWor",
"proxyPort": 9595,
"webrtc": "disable",
"startupParams": "",
"seed": 8728,
"clearCacheOnStart": false,
"clearCachePreserveExtensionsOnStart": false,
"clearCookiesOnStart": false,
"clearHistoryOnStart": false,
"blockLargeImages": false,
"maxImageKB": 199,
"disableMediaAutoplay": false,
"muteAllMedia": false,
"disableGoogleTranslate": false,
"disableSavePasswordPrompt": false,
"disableNotifications": false,
"blockClipboardRead": false,
"stopOnNetworkIssue": false,
"stopOnIPChange": false,
"stopOnCountryChange": false,
"syncPasswords": false,
"timezone": "",
"timezoneBaseIp": true,
"lat": "",
"lng": "",
"geolocationBaseIp": true,
"language": "en-US",
"languageBaseIp": true,
"uiLanguage": "en-US",
"uiLanguageBaseIp": true,
"resolution": "1400x900",
"fonts": "STIXGeneral-Regular,DengXian,Ayuthaya,Meiryo...",
"glVendor": "AMD",
"glRender": "AMD Radeon Pro 5300 Direct3D11 vs_5_0 ps_5_0, D3D11",
"gpuArch": "rdna-2",
"gpuVendor": "amd",
"canvas": true,
"audioContext": true,
"speechVoices": true,
"clientRects": true,
"cpu": 4,
"ram": 4,
"deviceMedia": true,
"deviceName": "DESKTOP-USQYQPY3",
"macAddress": "0E:4D:3D:3B:A4:90",
"disableTLS": [],
"portScanProtection": "",
"cookie": ""
},
"startInfo": {
"startPage": {
"mode": "none",
"value": []
},
"otherConfig": {
"openConfigPage": true,
"checkPage": true,
"extensionTab": false
}
},
"accountInfo": [],
"remark": "",
"encryptedCookie": null,
"cookie": null,
"status": 1,
"openStatus": 0,
"lockStatus": 0,
"pid": 0,
"browserPort": 0,
"createTime": "2026-01-28T05:50:20.558Z",
"updateTime": "2026-01-28T05:50:20.558Z",
"lastOpenedTime": "2026-01-28T05:50:32.367Z",
"userId": 20,
"proxyId": 655899,
"proxyInfo": {
"timezone": "Africa/Johannesburg",
"realIp": "102.217.242.75",
"lastCountry": "ZA",
"lastLocation": "-25.7751,29.4648",
"status": 2
},
"isDeleted": false,
"deleteTime": null,
"teamId": 19,
"groupId": null,
"syncFile": null,
"syncFileKeyVersion": null,
"proxy": {
"id": 655899,
"userIndex": 285,
"address": "socks5://148.113.187.209:9595",
"protocol": "socks5",
"host": "148.113.187.209",
"port": 9595,
"username": "com61163829-res-any-sid-905375838",
"password": "Bf1GCSgF162QWor",
"timezone": "Africa/Johannesburg",
"realIp": "102.217.242.75",
"lastIp": null,
"lastCountry": "ZA",
"lastLocation": "-25.7751,29.4648",
"lastCheckedTime": "2026-01-28T05:50:28.781Z",
"ipChecker": "https://iprust.io/ip.json",
"ipChangeAction": null,
"provider": "common",
"fetchStrategy": "on_ip_invalid",
"fetchUrl": "https://api.iprocket.io/api?username=com61163829&password=Bf1GCSgF162QWor&cc=any&ips=1000&type=-res-&proxyType=Socks5&responseType=txt",
"avoidUsedIp": false,
"status": 2,
"remark": null,
"createdTime": "2026-01-28T05:50:20.555Z",
"updatedTime": "2026-01-28T05:50:20.555Z",
"userId": 20,
"teamId": 19,
"isStoreProxy": false,
"orderId": null,
"storeDurationMinutes": null,
"storeTrafficLimit": null,
"storeExpireTime": null,
"isDeleted": false,
"groupId": null,
"profileId": "25264fb8694245078d9185206b5e6f0e",
"proxyHash": "1eddfc11c7c95c8dc3b3b16e01f04a7b7b49f2b14e3f78f8e94bb815a4c8ccd8"
},
"envId": 346949
},
"message": "成功"
}11. 获取正在运行的环境列表
获取当前正在运行的所有浏览器环境。
请求示例
curl -X GET http://127.0.0.1:50326/api/browser/open/list \
-H "Authorization: Bearer YOUR_API_KEY"const response = await fetch('/api/browser/open/list', {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY'
}
})
const data = await response.json()
console.log(data)import requests
url = "http://127.0.0.1:50326/api/browser/open/list"
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
print(response.json())返回示例
{
"success": true,
"data": [
{
"envId": 900,
"browserName": "11",
"ws": "ws://127.0.0.1:36203/devtools/browser/f1049062-aead-47ed-8719-15f0938b7dd5",
"http": "http://127.0.0.1:36203/json/version",
"openStatus": 1,
"pid": 27652,
"port": 36203,
"userIndex": 1,
"updatedAt": "2025-04-21T08:53:35.531Z"
}
],
"message": "成功"
}12. 一键自适应排版
自动调整多个浏览器窗口的位置和大小,实现屏幕自适应排版。
请求示例
curl -X POST http://127.0.0.1:50326/api/windowbounds/sort \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"envIds": [1, 2]
}'const response = await fetch('/api/windowbounds/sort', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
envIds: [1, 2]
})
})
const data = await response.json()
console.log(data)import requests
url = "http://127.0.0.1:50326/api/windowbounds/sort"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"envIds": [1, 2]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
envIds | number[] | 否 | 环境 ID |
返回示例
{ "success": true, "data": [], "message": "成功排列 2 个窗口" }13. 自定义排版
自动调整多个浏览器窗口的位置和大小,实现屏幕自适应排版。
请求示例
curl -X POST http://127.0.0.1:50326/api/windowbounds/sort/custom \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "box",
"startX": 0,
"startY": 0,
"width": 500,
"height": 400,
"col": 3,
"spaceX": 50,
"spaceY": 50,
"offsetX": 50,
"offsetY": 50,
"minWindowCount": 2,
"envIds": [1, 2]
}'const response = await fetch('/api/windowbounds/sort/custom', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
type: 'box',
startX: 0,
startY: 0,
width: 500,
height: 400,
col: 3,
spaceX: 50,
spaceY: 50,
offsetX: 50,
offsetY: 50,
minWindowCount: 2,
envIds: [1, 2]
})
})
const data = await response.json()
console.log(data)import requests
url = "http://127.0.0.1:50326/api/windowbounds/sort/custom"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"type": "box",
"startX": 0,
"startY": 0,
"width": 500,
"height": 400,
"col": 3,
"spaceX": 50,
"spaceY": 50,
"offsetX": 50,
"offsetY": 50,
"minWindowCount": 2,
"envIds": [1, 2]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
envIds | number[] | 否 | 环境 ID |
type | string | 是 | 布局类型(当前仅支持 box、diagonal)宫格 box , 对角线 diagonal |
width | number | 是 | 窗口宽度 |
height | number | 是 | 窗口高度 |
col | number | 是 | 列数 |
startX | number | 是 | 起始 X 坐标 |
startY | number | 是 | 起始 Y 坐标 |
spaceX | number | 是 | 水平间距 |
spaceY | number | 是 | 垂直间距 |
offsetX | number | 是 | X 偏移量 |
offsetY | number | 是 | Y 偏移量 |
minWindowCount | number | 否 | 最小窗口数量才执行排序 |
返回示例
{ "success": true, "data": [], "message": "成功排列 2 个窗口" }14. 获取移动设备列表
获取可用的移动设备列表,支持按操作系统筛选。用于创建移动端浏览器环境时选择设备型号。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
os | string | 否 | 操作系统筛选,可选值:Android、iOS |
请求示例
# 获取所有移动设备
curl -X GET "http://127.0.0.1:50326/api/browser/mobile-devices" \
-H "Authorization: Bearer YOUR_API_KEY"
# 获取 Android 设备
curl -X GET "http://127.0.0.1:50326/api/browser/mobile-devices?os=Android" \
-H "Authorization: Bearer YOUR_API_KEY"
# 获取 iOS 设备
curl -X GET "http://127.0.0.1:50326/api/browser/mobile-devices?os=iOS" \
-H "Authorization: Bearer YOUR_API_KEY"// 获取所有移动设备
const response = await fetch('/api/browser/mobile-devices', {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY'
}
})
const data = await response.json()
console.log(data)
// 按操作系统筛选
const androidDevices = await fetch('/api/browser/mobile-devices?os=Android', {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY'
}
}).then((res) => res.json())import requests
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
# 获取所有移动设备
response = requests.get(
"http://127.0.0.1:50326/api/browser/mobile-devices",
headers=headers
)
print(response.json())
# 按操作系统筛选
response = requests.get(
"http://127.0.0.1:50326/api/browser/mobile-devices",
headers=headers,
params={"os": "Android"}
)
print(response.json())返回示例
{
"success": true,
"data": {
"total": 2,
"list": [
{
"id": 1,
"name": "iPhone 14 Pro",
"os": "iOS",
"resolution": "1179x2556",
"platform": "iPhone"
},
{
"id": 2,
"name": "Samsung Galaxy S23",
"os": "Android",
"resolution": "1080x2340",
"platform": "Linux armv8l"
}
]
},
"message": "成功"
}返回字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
id | number | 设备 ID |
name | string | 设备名称 |
os | string | 操作系统(Android 或 iOS) |
resolution | string | 屏幕分辨率 |
platform | string | 平台标识 |
分组
1. 获取分组列表
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
current | number | 否 | 1 | 当前页 |
pageSize | number | 否 | 20 | 每页数量 |
请求示例
GET /api/groups/list?current=1&pageSize=20
Authorization: Bearer YOUR_API_KEY返回示例
{
"success": true,
"data": [
{
"id": 63,
"name": "kkkk",
"description": null,
"orderGroup": 0,
"userId": 4,
"teamId": 1,
"createTime": "2025-06-14T10:22:48.000Z",
"updateTime": "2025-06-14T10:22:48.000Z",
"envCount": 0
},
{
"id": 61,
"name": "vess",
"description": null,
"orderGroup": 2,
"userId": 4,
"teamId": 1,
"createTime": "2025-06-11T08:19:03.000Z",
"updateTime": "2025-06-11T08:19:03.000Z",
"envCount": 0
},
{
"id": 60,
"name": "kkkk",
"description": null,
"orderGroup": 0,
"userId": 4,
"teamId": 1,
"createTime": "2025-06-11T06:20:20.000Z",
"updateTime": "2025-06-11T06:20:20.000Z",
"envCount": 16
},
{
"id": 59,
"name": "aaa",
"description": null,
"orderGroup": 1,
"userId": 4,
"teamId": 1,
"createTime": "2025-06-10T14:07:50.000Z",
"updateTime": "2025-06-10T14:07:50.000Z",
"envCount": 10
}
],
"total": 4,
"current": 1,
"pageSize": 10,
"message": "成功"
}代理
1. 获取代理列表
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
current | number | 否 | 1 | 当前页 |
pageSize | number | 否 | 20 | 每页数量 |
请求示例
GET /api/proxies/list?current=1&pageSize=20
Authorization: Bearer YOUR_API_KEY返回示例
{
"success": true,
"data": [
{
"userIndex": 1,
"address": "socks5://185.171.254.53:6085",
"protocol": "socks5",
"host": "185.171.254.53",
"port": 6085,
"username": "username",
"password": "password",
"timezone": "Europe/Amsterdam",
"realIp": "185.171.254.53",
"lastIp": "185.171.254.53",
"lastCheckedTime": "2025-09-02T18:37:52.000Z",
"ipChecker": "https://ipinfo.io",
"ipChangeAction": null,
"status": 2,
"remark": null,
"createdTime": "2025-09-01T18:08:08.000Z",
"updatedTime": "2025-09-01T18:08:08.000Z",
"userId": 20,
"teamId": 1,
"isDeleted": false,
"groupId": null,
"profileId": "8e27864c1a3146c5929f49ac4036d886",
"proxyId": 1
}
],
"message": "成功"
}客户端窗口
1. 隐藏客户端窗口
请求参数
请求示例
POST /api/window/hide
Authorization: Bearer YOUR_API_KEY返回示例
{
"success": true,
"data": { "message": "窗口和托盘已隐藏", "windowHidden": true, "trayHidden": false },
"message": "成功"
}2. 展示客户端窗口
请求参数
请求示例
POST /api/window/show
Authorization: Bearer YOUR_API_KEY返回示例
{
"success": true,
"data": { "message": "窗口和托盘已显示", "windowShown": true, "trayShown": true },
"message": "成功"
}配置参数
分辨率
桌面端
5120x2880
2880x1800
2560x1600
2560x1440
2304x1440
2048x1152
1920x1200
1920x1080
1600x1200
1600x900
1400x1050
1400x900
1360x768
1280x1024
1280x960
1280x800
1280x720
1024x768
800x600移动端
320x569
360x640
360x720
360x740
360x748
360x760
360x780
411x731
414x896
480x853
480x854语言
sq-AL - 阿尔巴尼亚语 - shqip
ak - 阿肯语 - Akan
ar - 阿拉伯语 - العربية
an - 阿拉贡语 - aragonés
am - 阿姆哈拉语 - አማርኛ
as - 阿萨姆语 - অসমীয়া
az-Cyrl-AZ - 阿塞拜疆语 - azərbaycan
ast - 阿斯图里亚斯语 - asturianu
ee - 埃维语 - Eʋegbe
ay - 艾马拉语 - Aymar
ga - 爱尔兰语 - Gaeilge
et-EE - 爱沙尼亚语 - eesti
oc - 奥克语 - occitan
or - 奥里亚语 - ଓଡ଼ିଆ
om - 奥罗莫语 - Oromoo
eu - 巴斯克语 - euskara
be-BY - 白俄罗斯语 - беларуская
bm - 班巴拉语 - bamanakan
bg-BG - 保加利亚语 - български
nso - 北索托语 - Northern Sotho
is-IS - 冰岛语 - íslenska
pl-PL - 波兰语 - polski
bs - 波斯尼亚语 - bosanski
fa - 波斯语 - فارسی
bho - 博杰普尔语 - भोजपुरी
br - 布列塔尼语 - brezhoneg
tn - 茨瓦纳语 - Tswana
ts - 聪加语 - Xitsonga
tt - 鞑靼语 - татар
da-DK - 丹麦语 - dansk
de - 德语 - Deutsch
de-AT - 德语(奥地利) - Deutsch (Österreich)
de-DE - 德语(德国) - Deutsch (Deutschland)
de-LI - 德语(列支敦士登) - Deutsch (Liechtenstein)
de-CH - 德语(瑞士) - Deutsch (Schweiz)
dv - 迪维希语 - ދިވެހި
doi - 多格拉语 - डोगरी
ru - 俄语 - русский
fo - 法罗语 - føroyskt
fr - 法语 - français
fr-FR - 法语(法国) - français (France)
fr-CA - 法语(加拿大) - français (Canada)
fr-CH - 法语(瑞士) - français (Suisse)
sa - 梵语 - संस्कृत भाषा
fil-PH - 菲律宾语 - Filipino
fi-FI - 芬兰语 - suomi
km - 高棉语 - ខ្មែរ
ka-GE - 格鲁吉亚语 - ქართული
gu - 古吉拉特语 - ગુજરાતી
gn - 瓜拉尼语 - Guarani
ia - 国际语 - interlingua
kk - 哈萨克语 - қазақ тілі
ht - 海地克里奥尔语 - créole haïtien
ko - 韩语 - 한국어
ha - 豪萨语 - Hausa
nl-NL - 荷兰语 - Nederlands
gl - 加利西亚语 - galego
ca - 加泰罗尼亚语 - català
cs-CZ - 捷克语 - čeština
kn - 卡纳达语 - ಕನ್ನಡ
ky - 柯尔克孜语 - кыргызча
xh - 科萨语 - IsiXhosa
co - 科西嘉语 - Corsican
hr-HR - 克罗地亚语 - hrvatski
qu - 克丘亚语 - Runasimi
kok - 孔卡尼语 - कोंकणी
ku - 库尔德语 - Kurdî
la - 拉丁语 - Latin
lv-LV - 拉脱维亚语 - latviešu
lo-LA - 老挝语 - ລາວ
lt-LT - 立陶宛语 - lietuvių
ln - 林加拉语 - lingála
lg - 卢干达语 - Luganda
lb - 卢森堡语 - Lëtzebuergesch
rw-RW - 卢旺达语 - Kinyarwanda
ro-RO - 罗马尼亚语 - română
mo - 罗马尼亚语(摩尔多瓦) - română (Republica Moldova)
rm - 罗曼什语 - rumantsch
mt-MT - 马耳他语 - Malti
mr - 马拉地语 - मराठी
mg - 马拉加斯语 - Malagasy
ml - 马拉雅拉姆语 - മലയാളം
ms - 马来语 - Melayu
mk-MK - 马其顿语 - македонски
mai - 迈蒂利语 - मैथिली
mni-Mtei - 曼尼普尔语(曼尼普尔文) - mni (Mtei)
mi - 毛利语 - Māori
mn - 蒙古语 - монгол
bn-BD - 孟加拉语 - বাংলা
lus - 米佐语 - Mizo tawng
my - 缅甸语 - မြန်မာ
hmn - 苗语 - Hmong
af - 南非荷兰语 - Afrikaans
st - 南索托语 - Southern Sotho
ne-NP - 尼泊尔语 - नेपाली
nn - 挪威尼诺斯克语 - norsk nynorsk
no - 挪威语 - norsk
pa - 旁遮普语 - ਪੰਜਾਬੀ
pt-PT - 葡萄牙语 - português
pt-BR - 葡萄牙语(巴西) - português (Brasil)
pt-PT - 葡萄牙语(葡萄牙) - português (Portugal)
ps - 普什图语 - پښتو
ny - 齐切瓦语 - Nyanja
tw - 契维语 - Twi
chr - 切罗基语 - ᏣᎳᎩ
ja-JP - 日语 - 日本語
sv-SE - 瑞典语 - svenska
sm - 萨摩亚语 - Samoan
sh - 塞尔维亚-克罗地亚语 - srpskohrvatski
sr-Latn-RS - 塞尔维亚语 - српски
si - 僧伽罗语 - සිංහල
sn - 绍纳语 - chiShona
eo - 世界语 - Esperanto
nb - 书面挪威语 - norsk bokmål
sk-SK - 斯洛伐克语 - slovenčina
sl-SI - 斯洛文尼亚语 - slovenščina
sw - 斯瓦希里语 - Kiswahili
gd - 苏格兰盖尔语 - Gàidhlig
ceb - 宿务语 - Cebuano
so - 索马里语 - Soomaali
tg - 塔吉克语 - тоҷикӣ
te - 泰卢固语 - తెలుగు
ta - 泰米尔语 - தமிழ்
th - 泰语 - ไทย
to - 汤加语 - lea fakatonga
ti - 提格利尼亚语 - ትግርኛ
tr-TR - 土耳其语 - Türkçe
tk - 土库曼语 - türkmen dili
wa - 瓦隆语 - wa
cy - 威尔士语 - Cymraeg
ug - 维吾尔语 - ئۇيغۇرچە
wo - 沃洛夫语 - Wolof
ur - 乌尔都语 - اردو
uk-UA - 乌克兰语 - українська
uz - 乌兹别克语 - o‘zbek
es-ES - 西班牙语 - español
es-AR - 西班牙语(阿根廷) - español (Argentina)
es-CO - 西班牙语(哥伦比亚) - español (Colombia)
es-CR - 西班牙语(哥斯达黎加) - español (Costa Rica)
es-HN - 西班牙语(洪都拉斯) - español (Honduras)
es-419 - 西班牙语(拉丁美洲) - español (Latinoamérica)
es-US - 西班牙语(美国) - español (Estados Unidos)
es-PE - 西班牙语(秘鲁) - español (Perú)
es-MX - 西班牙语(墨西哥) - español (México)
es-VE - 西班牙语(委内瑞拉) - español (Venezuela)
es-UY - 西班牙语(乌拉圭) - español (Uruguay)
es-ES - 西班牙语(西班牙) - español (España)
es-CL - 西班牙语(智利) - español (Chile)
fy - 西弗里西亚语 - Frysk
he - 希伯来语 - עברית
el-GR - 希腊语 - Ελληνικά
haw - 夏威夷语 - ʻŌlelo Hawaiʻi
sd - 信德语 - سنڌي
hu-HU - 匈牙利语 - magyar
su - 巽他语 - Basa Sunda
hy-AM - 亚美尼亚语 - հայերեն
ig - 伊博语 - Igbo
ilo - 伊洛卡诺语 - Ilokano
it-IT - 意大利语 - italiano
it-CH - 意大利语(瑞士) - italiano (Svizzera)
it-IT - 意大利语(意大利) - italiano (Italia)
yi - 意第绪语 - ייִדיש
hi - 印地语 - हिन्दी
id-ID - 印度尼西亚语 - Indonesia
en - 英语 - English
en-IE - 英语(爱尔兰) - English (Ireland)
en-AU - 英语(澳大利亚) - English (Australia)
en-CA - 英语(加拿大) - English (Canada)
en-US - 英语(美国) - English (United States)
en-ZA - 英语(南非) - English (South Africa)
en-NZ - 英语(新西兰) - English (New Zealand)
en-IN - 英语(印度) - English (India)
en-GB-oxendict - 英语(英国,《牛津英语词典》拼法) - English (United Kingdom
en-GB - 英语(英国) - English (United Kingdom)
yo - 约鲁巴语 - Èdè Yorùbá
vi-VN - 越南语 - Tiếng Việt
jv - 爪哇语 - Jawa
ckb - 中库尔德语 - کوردیی ناوەندی
zh - 中文 - 中文
zh-TW - 中文(繁体) - 中文(繁體)
zh-CN - 中文(简体) - 中文(简体)
zh-HK - 中文(香港) - 中文(香港)
zu - 祖鲁语 - isiZulu时区
GMT-01:00 America/Scoresbysund
GMT-01:00 Atlantic/Azores
GMT-01:00 Atlantic/Cape_Verde
GMT-01:00 Etc/GMT+1
GMT-02:00 America/Noronha
GMT-02:00 Atlantic/South_Georgia
GMT-02:00 Etc/GMT+2
GMT-03:00 America/Araguaina
GMT-03:00 America/Argentina/Buenos_Aires
GMT-03:00 America/Argentina/Catamarca
GMT-03:00 America/Argentina/Cordoba
GMT-03:00 America/Argentina/Jujuy
GMT-03:00 America/Argentina/La_Rioja
GMT-03:00 America/Argentina/Mendoza
GMT-03:00 America/Argentina/Rio_Gallegos
GMT-03:00 America/Argentina/Salta
GMT-03:00 America/Argentina/San_Juan
GMT-03:00 America/Argentina/San_Luis
GMT-03:00 America/Argentina/Tucuman
GMT-03:00 America/Argentina/Ushuaia
GMT-03:00 America/Asuncion
GMT-03:00 America/Bahia
GMT-03:00 America/Belem
GMT-03:00 America/Cayenne
GMT-03:00 America/Fortaleza
GMT-03:00 America/Godthab
GMT-03:00 America/Maceio
GMT-03:00 America/Miquelon
GMT-03:00 America/Montevideo
GMT-03:00 America/Nuuk
GMT-03:00 America/Paramaribo
GMT-03:00 America/Punta_Arenas
GMT-03:00 America/Recife
GMT-03:00 America/Santarem
GMT-03:00 America/Santiago
GMT-03:00 America/Sao_Paulo
GMT-03:00 Antarctica/Palmer
GMT-03:00 Antarctica/Rothera
GMT-03:00 Atlantic/Stanley
GMT-03:00 Etc/GMT+3
GMT-03:30 America/St_Johns
GMT-04:00 America/Anguilla
GMT-04:00 America/Antigua
GMT-04:00 America/Aruba
GMT-04:00 America/Barbados
GMT-04:00 America/Blanc-Sablon
GMT-04:00 America/Boa_Vista
GMT-04:00 America/Campo_Grande
GMT-04:00 America/Caracas
GMT-04:00 America/Cuiaba
GMT-04:00 America/Curacao
GMT-04:00 America/Dominica
GMT-04:00 America/Glace_Bay
GMT-04:00 America/Goose_Bay
GMT-04:00 America/Grenada
GMT-04:00 America/Guadeloupe
GMT-04:00 America/Guyana
GMT-04:00 America/Halifax
GMT-04:00 America/Kralendijk
GMT-04:00 America/La_Paz
GMT-04:00 America/Lower_Princes
GMT-04:00 America/Manaus
GMT-04:00 America/Marigot
GMT-04:00 America/Martinique
GMT-04:00 America/Moncton
GMT-04:00 America/Montserrat
GMT-04:00 America/Port_of_Spain
GMT-04:00 America/Porto_Velho
GMT-04:00 America/Puerto_Rico
GMT-04:00 America/Santo_Domingo
GMT-04:00 America/St_Barthelemy
GMT-04:00 America/St_Kitts
GMT-04:00 America/St_Lucia
GMT-04:00 America/St_Thomas
GMT-04:00 America/St_Vincent
GMT-04:00 America/Thule
GMT-04:00 America/Tortola
GMT-04:00 Atlantic/Bermuda
GMT-04:00 Etc/GMT+4
GMT-05:00 America/Atikokan
GMT-05:00 America/Bogota
GMT-05:00 America/Cancun
GMT-05:00 America/Cayman
GMT-05:00 America/Detroit
GMT-05:00 America/Eirunepe
GMT-05:00 America/Grand_Turk
GMT-05:00 America/Guayaquil
GMT-05:00 America/Havana
GMT-05:00 America/Indiana/Indianapolis
GMT-05:00 America/Indiana/Marengo
GMT-05:00 America/Indiana/Petersburg
GMT-05:00 America/Indiana/Vevay
GMT-05:00 America/Indiana/Vincennes
GMT-05:00 America/Indiana/Winamac
GMT-05:00 America/Indianapolis
GMT-05:00 America/Iqaluit
GMT-05:00 America/Jamaica
GMT-05:00 America/Kentucky/Louisville
GMT-05:00 America/Kentucky/Monticello
GMT-05:00 America/Lima
GMT-05:00 America/Montreal
GMT-05:00 America/Nassau
GMT-05:00 America/New_York
GMT-05:00 America/Nipigon
GMT-05:00 America/Panama
GMT-05:00 America/Pangnirtung
GMT-05:00 America/Port-au-Prince
GMT-05:00 America/Rio_Branco
GMT-05:00 America/Thunder_Bay
GMT-05:00 America/Toronto
GMT-05:00 EST
GMT-05:00 EST5EDT
GMT-05:00 Etc/GMT+5
GMT-05:00 Pacific/Easter
GMT-06:00 America/Bahia_Banderas
GMT-06:00 America/Belize
GMT-06:00 America/Chicago
GMT-06:00 America/Costa_Rica
GMT-06:00 America/El_Salvador
GMT-06:00 America/Guatemala
GMT-06:00 America/Indiana/Knox
GMT-06:00 America/Indiana/Tell_City
GMT-06:00 America/Managua
GMT-06:00 America/Matamoros
GMT-06:00 America/Menominee
GMT-06:00 America/Merida
GMT-06:00 America/Mexico_City
GMT-06:00 America/Monterrey
GMT-06:00 America/North_Dakota/Beulah
GMT-06:00 America/North_Dakota/Center
GMT-06:00 America/North_Dakota/New_Salem
GMT-06:00 America/Rainy_River
GMT-06:00 America/Rankin_Inlet
GMT-06:00 America/Regina
GMT-06:00 America/Resolute
GMT-06:00 America/Swift_Current
GMT-06:00 America/Tegucigalpa
GMT-06:00 America/Winnipeg
GMT-06:00 CST6CDT
GMT-06:00 Etc/GMT+6
GMT-06:00 Pacific/Galapagos
GMT-07:00 America/Boise
GMT-07:00 America/Cambridge_Bay
GMT-07:00 America/Chihuahua
GMT-07:00 America/Creston
GMT-07:00 America/Dawson
GMT-07:00 America/Dawson_Creek
GMT-07:00 America/Denver
GMT-07:00 America/Edmonton
GMT-07:00 America/Fort_Nelson
GMT-07:00 America/Hermosillo
GMT-07:00 America/Inuvik
GMT-07:00 America/Mazatlan
GMT-07:00 America/Ojinaga
GMT-07:00 America/Phoenix
GMT-07:00 America/Whitehorse
GMT-07:00 America/Yellowknife
GMT-07:00 Etc/GMT+7
GMT-07:00 MST
GMT-07:00 MST7MDT
GMT-08:00 America/Los_Angeles
GMT-08:00 America/Tijuana
GMT-08:00 America/Vancouver
GMT-08:00 Etc/GMT+8
GMT-08:00 Pacific/Pitcairn
GMT-08:00 PST8PDT
GMT-09:00 America/Anchorage
GMT-09:00 America/Juneau
GMT-09:00 America/Metlakatla
GMT-09:00 America/Nome
GMT-09:00 America/Sitka
GMT-09:00 America/Yakutat
GMT-09:00 Etc/GMT+9
GMT-09:00 Pacific/Gambier
GMT-09:30 Pacific/Marquesas
GMT-10:00 America/Adak
GMT-10:00 Etc/GMT+10
GMT-10:00 HST
GMT-10:00 Pacific/Honolulu
GMT-10:00 Pacific/Rarotonga
GMT-10:00 Pacific/Tahiti
GMT-11:00 Etc/GMT+11
GMT-11:00 Pacific/Midway
GMT-11:00 Pacific/Niue
GMT-11:00 Pacific/Pago_Pago
GMT-12:00 Etc/GMT+12
GMT+00:00 Africa/Abidjan
GMT+00:00 Africa/Accra
GMT+00:00 Africa/Bamako
GMT+00:00 Africa/Banjul
GMT+00:00 Africa/Bissau
GMT+00:00 Africa/Conakry
GMT+00:00 Africa/Dakar
GMT+00:00 Africa/Freetown
GMT+00:00 Africa/Lome
GMT+00:00 Africa/Monrovia
GMT+00:00 Africa/Nouakchott
GMT+00:00 Africa/Ouagadougou
GMT+00:00 Africa/Sao_Tome
GMT+00:00 America/Danmarkshavn
GMT+00:00 Antarctica/Troll
GMT+00:00 Atlantic/Canary
GMT+00:00 Atlantic/Faroe
GMT+00:00 Atlantic/Madeira
GMT+00:00 Atlantic/Reykjavik
GMT+00:00 Atlantic/St_Helena
GMT+00:00 Etc/GMT
GMT+00:00 Etc/GMT-0
GMT+00:00 Etc/GMT+0
GMT+00:00 Etc/GMT0
GMT+00:00 Etc/Greenwich
GMT+00:00 Etc/Universal
GMT+00:00 Etc/Zulu
GMT+00:00 Europe/Dublin
GMT+00:00 Europe/Guernsey
GMT+00:00 Europe/Isle_of_Man
GMT+00:00 Europe/Jersey
GMT+00:00 Europe/Lisbon
GMT+00:00 Europe/London
GMT+00:00 GMT
GMT+00:00 UTC
GMT+00:00 WET
GMT+01:00 Africa/Algiers
GMT+01:00 Africa/Bangui
GMT+01:00 Africa/Brazzaville
GMT+01:00 Africa/Casablanca
GMT+01:00 Africa/Ceuta
GMT+01:00 Africa/Douala
GMT+01:00 Africa/El_Aaiun
GMT+01:00 Africa/Kinshasa
GMT+01:00 Africa/Lagos
GMT+01:00 Africa/Libreville
GMT+01:00 Africa/Luanda
GMT+01:00 Africa/Malabo
GMT+01:00 Africa/Ndjamena
GMT+01:00 Africa/Niamey
GMT+01:00 Africa/Porto-Novo
GMT+01:00 Africa/Tunis
GMT+01:00 Arctic/Longyearbyen
GMT+01:00 CET
GMT+01:00 Etc/GMT-1
GMT+01:00 Europe/Amsterdam
GMT+01:00 Europe/Andorra
GMT+01:00 Europe/Belgrade
GMT+01:00 Europe/Berlin
GMT+01:00 Europe/Bratislava
GMT+01:00 Europe/Brussels
GMT+01:00 Europe/Budapest
GMT+01:00 Europe/Busingen
GMT+01:00 Europe/Copenhagen
GMT+01:00 Europe/Gibraltar
GMT+01:00 Europe/Ljubljana
GMT+01:00 Europe/Luxembourg
GMT+01:00 Europe/Madrid
GMT+01:00 Europe/Malta
GMT+01:00 Europe/Monaco
GMT+01:00 Europe/Oslo
GMT+01:00 Europe/Paris
GMT+01:00 Europe/Podgorica
GMT+01:00 Europe/Prague
GMT+01:00 Europe/Rome
GMT+01:00 Europe/San_Marino
GMT+01:00 Europe/Sarajevo
GMT+01:00 Europe/Skopje
GMT+01:00 Europe/Stockholm
GMT+01:00 Europe/Tirane
GMT+01:00 Europe/Vaduz
GMT+01:00 Europe/Vatican
GMT+01:00 Europe/Vienna
GMT+01:00 Europe/Warsaw
GMT+01:00 Europe/Zagreb
GMT+01:00 Europe/Zurich
GMT+01:00 MET
GMT+02:00 Africa/Blantyre
GMT+02:00 Africa/Bujumbura
GMT+02:00 Africa/Cairo
GMT+02:00 Africa/Gaborone
GMT+02:00 Africa/Harare
GMT+02:00 Africa/Johannesburg
GMT+02:00 Africa/Khartoum
GMT+02:00 Africa/Kigali
GMT+02:00 Africa/Lubumbashi
GMT+02:00 Africa/Lusaka
GMT+02:00 Africa/Maputo
GMT+02:00 Africa/Maseru
GMT+02:00 Africa/Mbabane
GMT+02:00 Africa/Tripoli
GMT+02:00 Africa/Windhoek
GMT+02:00 Asia/Amman
GMT+02:00 Asia/Beirut
GMT+02:00 Asia/Damascus
GMT+02:00 Asia/Famagusta
GMT+02:00 Asia/Gaza
GMT+02:00 Asia/Hebron
GMT+02:00 Asia/Jerusalem
GMT+02:00 Asia/Nicosia
GMT+02:00 EET
GMT+02:00 Etc/GMT-2
GMT+02:00 Europe/Athens
GMT+02:00 Europe/Bucharest
GMT+02:00 Europe/Chisinau
GMT+02:00 Europe/Helsinki
GMT+02:00 Europe/Kaliningrad
GMT+02:00 Europe/Kiev
GMT+02:00 Europe/Mariehamn
GMT+02:00 Europe/Nicosia
GMT+02:00 Europe/Riga
GMT+02:00 Europe/Sofia
GMT+02:00 Europe/Tallinn
GMT+02:00 Europe/Uzhgorod
GMT+02:00 Europe/Vilnius
GMT+02:00 Europe/Zaporozhye
GMT+03:00 Africa/Addis_Ababa
GMT+03:00 Africa/Asmara
GMT+03:00 Africa/Dar_es_Salaam
GMT+03:00 Africa/Djibouti
GMT+03:00 Africa/Juba
GMT+03:00 Africa/Kampala
GMT+03:00 Africa/Mogadishu
GMT+03:00 Africa/Nairobi
GMT+03:00 Antarctica/Syowa
GMT+03:00 Asia/Aden
GMT+03:00 Asia/Baghdad
GMT+03:00 Asia/Bahrain
GMT+03:00 Asia/Istanbul
GMT+03:00 Asia/Kuwait
GMT+03:00 Asia/Qatar
GMT+03:00 Asia/Riyadh
GMT+03:00 Etc/GMT-3
GMT+03:00 Europe/Istanbul
GMT+03:00 Europe/Kirov
GMT+03:00 Europe/Minsk
GMT+03:00 Europe/Moscow
GMT+03:00 Europe/Simferopol
GMT+03:00 Indian/Antananarivo
GMT+03:00 Indian/Comoro
GMT+03:00 Indian/Mayotte
GMT+03:30 Asia/Tehran
GMT+04:00 Asia/Baku
GMT+04:00 Asia/Dubai
GMT+04:00 Asia/Muscat
GMT+04:00 Asia/Tbilisi
GMT+04:00 Asia/Yerevan
GMT+04:00 Etc/GMT-4
GMT+04:00 Europe/Astrakhan
GMT+04:00 Europe/Samara
GMT+04:00 Europe/Saratov
GMT+04:00 Europe/Ulyanovsk
GMT+04:00 Europe/Volgograd
GMT+04:00 Indian/Mahe
GMT+04:00 Indian/Mauritius
GMT+04:00 Indian/Reunion
GMT+04:30 Asia/Kabul
GMT+05:00 Antarctica/Mawson
GMT+05:00 Asia/Aqtau
GMT+05:00 Asia/Aqtobe
GMT+05:00 Asia/Ashgabat
GMT+05:00 Asia/Atyrau
GMT+05:00 Asia/Dushanbe
GMT+05:00 Asia/Karachi
GMT+05:00 Asia/Oral
GMT+05:00 Asia/Qyzylorda
GMT+05:00 Asia/Samarkand
GMT+05:00 Asia/Tashkent
GMT+05:00 Asia/Yekaterinburg
GMT+05:00 Etc/GMT-5
GMT+05:00 Indian/Kerguelen
GMT+05:00 Indian/Maldives
GMT+05:30 Asia/Calcutta
GMT+05:30 Asia/Colombo
GMT+05:30 Asia/Kolkata
GMT+05:45 Asia/Kathmandu
GMT+05:45 Asia/Katmandu
GMT+06:00 Antarctica/Vostok
GMT+06:00 Asia/Almaty
GMT+06:00 Asia/Bishkek
GMT+06:00 Asia/Dhaka
GMT+06:00 Asia/Omsk
GMT+06:00 Asia/Qostanay
GMT+06:00 Asia/Thimphu
GMT+06:00 Asia/Urumqi
GMT+06:00 Etc/GMT-6
GMT+06:00 Indian/Chagos
GMT+06:30 Asia/Yangon
GMT+06:30 Indian/Cocos
GMT+07:00 Antarctica/Davis
GMT+07:00 Asia/Bangkok
GMT+07:00 Asia/Barnaul
GMT+07:00 Asia/Ho_Chi_Minh
GMT+07:00 Asia/Hovd
GMT+07:00 Asia/Jakarta
GMT+07:00 Asia/Krasnoyarsk
GMT+07:00 Asia/Novokuznetsk
GMT+07:00 Asia/Novosibirsk
GMT+07:00 Asia/Phnom_Penh
GMT+07:00 Asia/Pontianak
GMT+07:00 Asia/Tomsk
GMT+07:00 Asia/Vientiane
GMT+07:00 Etc/GMT-7
GMT+07:00 Indian/Christmas
GMT+08:00 Asia/Brunei
GMT+08:00 Asia/Choibalsan
GMT+08:00 Asia/Hong_Kong
GMT+08:00 Asia/Irkutsk
GMT+08:00 Asia/Kuala_Lumpur
GMT+08:00 Asia/Kuching
GMT+08:00 Asia/Macau
GMT+08:00 Asia/Makassar
GMT+08:00 Asia/Manila
GMT+08:00 Asia/Shanghai
GMT+08:00 Asia/Singapore
GMT+08:00 Asia/Taipei
GMT+08:00 Asia/Ulaanbaatar
GMT+08:00 Australia/Perth
GMT+08:00 Etc/GMT-8
GMT+08:45 Australia/Eucla
GMT+09:00 Asia/Chita
GMT+09:00 Asia/Dili
GMT+09:00 Asia/Jayapura
GMT+09:00 Asia/Khandyga
GMT+09:00 Asia/Pyongyang
GMT+09:00 Asia/Seoul
GMT+09:00 Asia/Tokyo
GMT+09:00 Asia/Yakutsk
GMT+09:00 Etc/GMT-9
GMT+09:00 Pacific/Palau
GMT+09:30 Australia/Darwin
GMT+10:00 Antarctica/DumontDUrville
GMT+10:00 Asia/Ust-Nera
GMT+10:00 Asia/Vladivostok
GMT+10:00 Australia/Brisbane
GMT+10:00 Australia/Lindeman
GMT+10:00 Etc/GMT-10
GMT+10:00 Pacific/Chuuk
GMT+10:00 Pacific/Guam
GMT+10:00 Pacific/Port_Moresby
GMT+10:00 Pacific/Saipan
GMT+10:30 Australia/Adelaide
GMT+10:30 Australia/Broken_Hill
GMT+11:00 Antarctica/Casey
GMT+11:00 Antarctica/Macquarie
GMT+11:00 Asia/Magadan
GMT+11:00 Asia/Sakhalin
GMT+11:00 Asia/Srednekolymsk
GMT+11:00 Australia/Currie
GMT+11:00 Australia/Hobart
GMT+11:00 Australia/Lord_Howe
GMT+11:00 Australia/Melbourne
GMT+11:00 Australia/Sydney
GMT+11:00 Etc/GMT-11
GMT+11:00 Pacific/Bougainville
GMT+11:00 Pacific/Efate
GMT+11:00 Pacific/Guadalcanal
GMT+11:00 Pacific/Kosrae
GMT+11:00 Pacific/Noumea
GMT+11:00 Pacific/Pohnpei
GMT+12:00 Asia/Anadyr
GMT+12:00 Asia/Kamchatka
GMT+12:00 Etc/GMT-12
GMT+12:00 Pacific/Fiji
GMT+12:00 Pacific/Funafuti
GMT+12:00 Pacific/Kwajalein
GMT+12:00 Pacific/Majuro
GMT+12:00 Pacific/Nauru
GMT+12:00 Pacific/Norfolk
GMT+12:00 Pacific/Tarawa
GMT+12:00 Pacific/Wake
GMT+12:00 Pacific/Wallis
GMT+13:00 Antarctica/McMurdo
GMT+13:00 Etc/GMT-13
GMT+13:00 Pacific/Auckland
GMT+13:00 Pacific/Enderbury
GMT+13:00 Pacific/Fakaofo
GMT+13:00 Pacific/Tongatapu
GMT+13:45 Pacific/Chatham
GMT+14:00 Etc/GMT-14
GMT+14:00 Pacific/Apia
GMT+14:00 Pacific/Kiritimati