Skip to content

Hướng dẫn phát triển API

I. Hướng dẫn phát triển dịch vụ API Open

1.1 Cách sử dụng

  1. Cài đặt và đăng nhập vào trình duyệt DICloak.
  2. Mở Cài đặt thêm – API mở – Lấy URL và khóa giao diện cục bộ.
  3. Lấy mã ví dụ và chạy script.

1.2 Tổng quan về cách sử dụng giao diện

  • Khi phương thức yêu cầu giao diện là POST, cách truyền tham số là truyền tham số qua body, với dữ liệu định dạng JSON, không phải là form-data cũng không phải là tham số trong URL.
  • Giao diện trả về một đối tượng JSON, nếu code là 0, có nghĩa là thành công, nếu có dữ liệu trả về, chúng sẽ được đính kèm trong đối tượng data.
  • Nếu code không phải là 0, có nghĩa là thất bại, thông tin lỗi sẽ được đính kèm trong trường msg.
{
    'code': 0,
    'msg': 'success',
    'data': {
        'serial_number': 2,
        'pid': '27028',
        'debug_port': 17539
    }
}
{
    'code': 500,
    'msg': 'fetch fail'
}
  • Tất cả các yêu cầu đều cần thêm vào header: X-API-KEY, với giá trị là khóa được sao chép từ client.

1.3 Mã ví dụ

Trình duyệt Dicloak sử dụng lõi 120, cần tải xuống chromedriver trước.

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'])

II. Chi tiết giao diện hồ sơ

GET Lấy danh sách hồ sơ

GET /v1/env/{env_id}/open

Tham số yêu cầu

TênLoạiBắt buộcMô tả
page_nointegerTrang, mặc định là 1
page_sizeintegerKích thước trang, mặc định là 10
serial_numintegerKhôngSố
namestringKhôngTên
group_idstringKhôngNhóm
proxy_hoststringKhôngMáy chủ proxy (Cách 1)
statusstringKhôngTrạng thái(DISABLED Tạm ngừng ENABLED Bình thường)
platform_userstringKhôngNền tảng
remarkstringKhôngGhi chú
start_create_timestringKhôngThời gian bắt đầu
end_create_timestringKhôngThời gian kết thúc
operate_statusstringKhôngTrạng thái hồ sơ ENABLED Mở,DISABLED Đóng
X-API-KEY请求头

Tham số phản hồi

TênLoạiBắt buộcMô tả
idstring id Hồ sơ,env_id
create_timestringKhôngThời gian tạo
update_timestringKhôngThời gian cập nhật
serial_numintegerSố
group_idstringKhôngID Nhóm
group_namestringKhôngTên Nhóm
namestringTên
browserstringKhôngLoại Trình duyệt (CHROME:Chrome)
ua_typestringKhôngLoại UA
uastringKhôngUser Agent
ua_osstringKhôngUser Agent OS
cookiestringKhôngcookie
other_cookiestringKhôngcookie Khác
proxy_waystringKhôngPhương thức proxy (CUSTOM:Tùy chỉnh SELECT_EXIST:Chọn sẵn có)
proxy_idstringKhôngID Proxy (Cách 2)
proxy_typestringKhôngLoại proxy(Cách 1) (NON_USE:không sử dụng HTTP HTTPS SSH SOCKS5 IPFLY)
proxy_hoststringKhôngMáy chủ proxy(Cách1)
proxy_portinteger(int32)KhôngCổng proxy(Cách 1)
proxy_user_namestringKhôngTài khoản proxy(cách 1)
proxy_passwdstringKhôngMật khẩu proxy (cách 1)
proxy_ip_typestringKhôngIP查询渠道(方式1) (IP2LOCATION)
urls[string]KhôngDanh sách url
configstringKhôngCài đặt nâng caoJSON
statusstringKhôngTrạng thái(DISABLED Ngừng ENABLED Bình thường)
remarkstringKhôngGhi chú
last_open_timestringKhôngThời gian mở gần đây
operate_statusstringKhôngTrạng thái hoạt động DISABLED Đóng ENABLED Kích hoạt LOCK Khóa
account_list[object]KhôngTài khoản
font_idstringKhôngid Phông chữ
data_configstringKhôngCấu hình dữ liệu
browser_configstringKhôngCấu hình trình duyệt
env_mutil_open_typestringKhôngMở đa hồ sơ: GLOBAL:Toàn cục ALLOW:Cho phép BAN:Cấm
operate_members[object]KhôngThông tin người thao tác hồ sơ hiện tại
config_ext_mapobjectKhôngTrường tiện ích
totalinteger(int32)Tổng số mục

Ví dụ phản hồi

{
    "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 Mở Hồ Sơ

PATCH /v1/env/{env_id}/open

Tham số yêu cầu

TênLoạiBắt buộcMô tả
env_idstringID Hồ Sơ,ID Hồ sơ tương ứng

Thông số phản hồi

TênLoạiBắt buộcMô tả
serial_numberinteger(int32)Số hồ sơ
pidstringid Tiến trình hồ sơ
debug_portintegerCổng hồ sơ

Ví dụ phản hồi

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

PATCH Đóng Hồ Sơ

PATCH /v1/env/{env_id}/close

Tham số yêu cầu

TênLoạiBắt buộcMô tả
env_idstringID Hồ sơ,id Hồ sơ tương ứng

Tham số phản hồi

TênLoạiBắt buộcMô tả
serial_numberinteger(int32)Số hồ sơ
pidstringid Tiến trình hồ sơ
debug_portintegerCổng hồ sơ

Ví dụ phản hồi

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