Skip to content

API开发指南

  • by

一、Open Api本地服务开发指南

1.1 使用方式

  1. 安装并登录DICloak浏览器
  2. 打开更多设置 – 开放Api – 获取本地接口URL和密钥
  3. 获取示例代码,运行脚本

1.2 接口使用概述

  • 接口请求方式为post时,传参方式均为body传参,传递json格式数据,不是form-data,也不是url传参数
  • 接口返回json对象,code为0作成功,如有返回数据,附加在data对象中
  • code 不为 0 时,表示失败,失败信息会附加到 msg 字段中
{
    'code': 0,
    'msg': 'success',
    'data': {
        'serial_number': 2,
        'pid': '27028',
        'debug_port': 17539
    }
}
{
    'code': 500,
    'msg': 'fetch fail'
}
  • 所有请求都需要加上请求头:X-API-KEY,值为从客户端复制出来的密钥

1.3 示例代码

Dicloak 内核用的是120内核,需要先下载 chromedriver

import time

import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# port and api key
BASE_URL = "http://127.0.0.1:52140/openapi"
API_KEY = "IvGM26nKG6XoSAtgJ84TAi9jrrwPqY8aWhwyDlY-4opXsqwex-OhLyFYv1e47rR2"

def open_browser(port):
    """
    hold profile
    :param port:
    :return:
    """
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_experimental_option('debuggerAddress', f"127.0.0.1:{port}")
    s = Service(r"G:\chromedriver.exe")
    browser = webdriver.Chrome(options=chrome_options, service=s)

    browser.get("https://www.zhihu.com")


def get_evn_list():
    headers = {
        "X-API-KEY": API_KEY,
    }

    params = {
        "page_no": 1,
        "page_size": 20
    }

    response = requests.get(f"{BASE_URL}/v1/env/list", params=params, headers=headers)
    return response.json()


def open_env(env_id):
    """
    open profile
    :param env_id:  id
    :return:
    """
    headers = {
        "X-API-KEY": API_KEY,
    }

    response = requests.patch(f"{BASE_URL}/v1/env/{env_id}/open", headers=headers)
    return response.json()


def close_env(env_id):
    """
    close profile
    :param env_id:
    :return:
    """
    headers = {
        "X-API-KEY": API_KEY,
    }

    response = requests.patch(f"{BASE_URL}/v1/env/{env_id}/close", headers=headers)
    return response.json()


if __name__ == '__main__':
    resp = get_evn_list()
    if resp['code'] != 0:
        print(resp.msg)
        exit(0)
    # profile list
    list = resp['data']['list']
    if len(list) == 0:
        print('no profile')
        exit(0)
    print(f"open profile:{list[0]['id']}")

    open_resp = open_env(list[0]['id'])
    if open_resp['code'] != 0:
        print(open_resp['msg'])
        exit(0)

    print(f"open_resp : {open_resp}")

    # Automatic
    open_browser(open_resp['data']['debug_port'])

    time.sleep(3)
    # close profile
    close_env(list[0]['id'])

二、环境接口详情

GET 获取环境列表

GET /v1/env/{env_id}/open

请求参数

名称类型必选说明
page_nointeger页码,默认1
page_sizeinteger分页大小,默认10
serial_numinteger序号
namestring名称
group_idstring分组
proxy_hoststring代理主机(方式1)
statusstring状态(DISABLED停用 ENABLED正常)
platform_userstring平台
remarkstring备注
start_create_timestring开始时间
end_create_timestring结束时间
operate_statusstring环境打开状态 ENABLED 打开,DISABLED 关闭
X-API-KEY请求头

响应参数

名称类型必选说明
idstring环境id,env_id
create_timestring创建时间
update_timestring修改时间
serial_numinteger序号
group_idstring分组ID
group_namestring分组名称
namestring名称
browserstring浏览器类型 (CHROME:Chrome)
ua_typestringua类型
uastringUser Agent
ua_osstringUser Agent OS
cookiestringcookie
other_cookiestring其它cookie
proxy_waystring代理方式 (CUSTOM:自定义 SELECT_EXIST:选择已有)
proxy_idstring代理ID(方式2)
proxy_typestring代理类型(方式1) (NON_USE:不使用 HTTP HTTPS SSH SOCKS5 IPFLY)
proxy_hoststring代理主机(方式1)
proxy_portinteger(int32)代理端口(方式1)
proxy_user_namestring代理账号(方式1)
proxy_passwdstring代理密码(方式1)
proxy_ip_typestringIP查询渠道(方式1) (IP2LOCATION)
urls[string]url列表
configstring高级设置JSON
statusstring状态(DISABLED停用 ENABLED正常)
remarkstring备注
last_open_timestring最近打开时间
operate_statusstring操作状态 DISABLED关闭 ENABLED启用 LOCK锁定
account_list[object]账号
font_idstring字体id
data_configstring数据配置
browser_configstring浏览器配置
env_mutil_open_typestring环境多开: GLOBAL:全局 ALLOW:允许 BAN:禁止
operate_members[object]当前环境操作人信息
config_ext_mapobject扩展字段
totalinteger(int32)总条数

响应示例

{
    "code": 0,
    "msg": "success",
    "data": {
        "list": [
            {
                "id": "1848687666096832515",
                "create_time": "2024-10-22 19:27:41",
                "update_time": "2024-10-23 21:28:15",
                "serial_num": 166,
                "group_id": "1776895967565094913",
                "group_name": null,
                "name": "\u5bfc\u5165-\u8d26\u6237-copy166-20241022192741216",
                "browser": "CHROME",
                "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6005.0 Safari/537.36",
                "ua_os": "MAC",
                "cookie": "",
                "other_cookie": null,
                "urls": [
                    
                ],
                "status": "ENABLED",
                "remark": null,
                "last_open_time": "2024-10-23 21:26:15",
                "operate_status": "DISABLED",
                "account_list": null,
                "font_id": "",
                "data_config": "{\"type\":25,\"dataType\":\"custom\"}",
                "browser_config": "{\"type\":1,\"browserType\":\"custom\"}",
                "env_mutil_open_type": "GLOBAL",
                "config_ext_map": null
            }
        ],
        "total": 65
    }
}

PATCH 打开环境

PATCH /v1/env/{env_id}/open

请求参数

名称类型必选说明
env_idstring环境ID,对应列表中的id

响应参数

类型必选说明
serial_numberinteger(int32)环境序号
pidstring环境的进程id
debug_portinteger环境端口

响应示例

{
    'code': 0,
    'msg': 'success',
    'data': {
        'serial_number': 2,
        'pid': '27028',
        'debug_port': 17539
    }
}

PATCH 关闭环境

PATCH /v1/env/{env_id}/close

请求参数

名称类型必选说明
env_idstring环境ID,对应列表中的id

响应参数

名称类型必选说明
serial_numberinteger(int32)环境序号
pidstring环境的进程id
debug_portinteger环境端口

响应示例

{
    'code': 0,
    'msg': 'success'
}