Instant профили
Введение
Vision предоставляет возможность запуска "одноразового" профиля. Данный профиль будет запущен сразу после выполнения запроса на запуск, а по закрытии данный профиль будет удален и недоступен для последующего использования. При этом данные из профиля (Cookies) будут находиться в ответе на запрос закрытия профиля.
Данный функционал полезен автоматизаторам, работа которых не подразумевает использование профиля после его первого запуска и последующей остановки.
Важно! Все параметры, описанные ниже, являются опциональными.
Для старта профиля не требуется никаких параметров, указывайте их только в случае, если необходимо запустить профиль с определёнными значениями.
Базовый URL для запуска Instant профиля
Используйте метод GET для запуска профиля без параметров. В этом случае профиль будет запущен со случайным отпечатком, ОС отпечатка будет совпадать с вашей.
Используйте метод POST для запуска профиля с параметрами, указанными в теле запроса.
Базовый URL для остановки Instant профиля
Запрос
Заголовки запроса
Prop
Type
Тело запроса
Prop
Type
Объект Fingerprint
Объект navigator
Prop
Type
Список доступных тайм-зон можно получить выполнив соответствующий запрос к Local API. Подробнее об этом написано здесь.
Список доступных языков также можно получить аналогичным запросом.
Объект screen
Prop
Type
Параметр webgl_renderer
Prop
Type
Список доступных видеокарт можно получить выполнив соответствующий запрос к Local API. Подробнее об этом написано здесь.
Объект media_devices
Prop
Type
Объект geolocation
Prop
Type
Объект noise
В случае, если не требуется накладывать шум ни на один из вышеуказанных параметров - объект noise можно не указывать.
Если шум требуется указать только на одном или двух из трёх параметров, то оставшиеся параметры указывать в объекте noise не обязательно.
Prop
Type
Параметр canvas
Если требуется отключить Canvas - значение off, если требуется режим Реальный (Real) - не указывайте параметр canvas в объекте fingerprint.
Prop
Type
Параметр webgl
Если требуется отключить WebGL - значение off, если требуется режим Реальный (Real) - не указывайте параметр webgl в объекте fingerprint.
Prop
Type
Параметр webrtc
Если требуется отключить WebRTC - значение off, если требуется указать значение Manual (Вручную) - указывается IP адрес в формате строки, например 1.1.1.1, если требуется режим Авто (Auto) - не указывайте параметр webrtc в объекте fingerprint.
Prop
Type
Параметр ports_protection
Prop
Type
Объект behavior
Prop
Type
Запуск Instant профиля
Примеры запроса на запуск Instant профиля без параметров
const url = "http://127.0.0.1:3030/start/instant"; const options = { method: "GET", headers: { "X-Token": "Your Token", }, };fetch(url, options) .then((response) => { response.json().then((data) => { console.log(data); }); }) .catch((error) => { console.error(error); });import requestsurl = 'http://127.0.0.1:3030/start/instant' headers = { 'X-Token': 'Your Token', 'Content-Type': 'application/json'}response = requests.get(url, headers=headers)print(response.json())<?php$url = "http://127.0.0.1:3030/start/instant";$token = "Your Token"; $headers = array( 'X-Token: '.$token, 'Content-Type: application/json');$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);$data = curl_exec($ch);if (curl_errno($ch)) { print "Error: " . curl_error($ch);} else { var_dump($data); curl_close($ch);}?>// Requires tokio with features = ["macros", "rt-multi-thread"]// Requires reqwest with features = ["json"]// Requires serde_json#[tokio::main]async fn main() { let url = "http://127.0.0.1:3030/start/instant"; let token = "Token"; let client = reqwest::Client::new(); let response = client .get(url) .header("X-Token", token) .send() .await .expect("Failed to send request") .json::<serde_json::Value>() .await .expect("Failed to parse response"); dbg!(response);}package mainimport ( "io" "net/http")func main() { url := "http://127.0.0.1:3030/start/instant" token := "Your Token" client := http.Client{} req, err := http.NewRequest("GET", url, nil) if err != nil { panic(err) } req.Header.Add("X-Token", token) resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) println(string(body))}var url = "http://127.0.0.1:3030/start/instant";var token = "Your Token"; var client = new HttpClient();client.DefaultRequestHeaders.Add("X-Token", token);var response = await client.GetAsync(url);var content = await response.Content.ReadAsStringAsync();Console.WriteLine(content);Ответ
Данные ответа
Prop
Type
Пример ответа
{
success: true,
profile_id: "039e50ce-6748-43c3-81ca-9d16aece007e",
port: 61453
}Примеры запроса на запуск Instant профиля со всеми параметрами
const url = "http://127.0.0.1:3030/start/instant"; const body = { "name": "Profile 1", "os": "macos", "version": 142, "smart": "standard", "fingerprint": { "navigator": { "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36", "language": "en-GB", "languages": [ "en-GB", "en", "en-US", "en" ], "timezone": "America/New_York", "hardware_concurrency": 8, "device_memory": 8 }, "screen": { "resolution": "1920x1080", "pixel_ratio": 2 }, "webgl_renderer": "Apple M3", "media_devices": { "audio_input": 1, "audio_output": 1, "video_input": 1 }, "geolocation": { "latitude": 40.7128, "longitude": -74.006, "accuracy": 100 }, "noise": { "canvas": true, "webgl": true, "client_rects": true }, "canvas": "off", "webgl": "off", "webrtc": "1.1.1.1", "ports_protection": [ 3389, 5900, 5901 ] }, "proxy": "socks5://user:pass@1.1.1.1:5555", "extensions": [ "C:\\extension1", "C:\\extension2" ], "cookies": [ { "domain": ".google.com", "name": "1P_JAR", "value": "2021-11-10-11", "path": "/", "expires": 1639134293, "secure": true, "http_only": false, "same_site": "none" } ], "behavior": { "urls": [ "https://google.com/" ], "args": [ "--flag" ], "headless": false, "remote_debugging_port": 61374, "timeout": 3 }}const options = { method: "POST", headers: { "X-Token": "Your Token", "Content-Type": "application/json" }, body: JSON.stringify(body)};fetch(url, options) .then((response) => { response.json().then((data) => { console.log(data); }); }) .catch((error) => { console.error(error); });import requestsurl = 'http://127.0.0.1:3030/start/instant' body = { "name": "Profile 1", "os": "macos", "version": 142, "smart": "standard", "fingerprint": { "navigator": { "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36", "language": "en-GB", "languages": [ "en-GB", "en", "en-US", "en" ], "timezone": "America/New_York", "hardware_concurrency": 8, "device_memory": 8 }, "screen": { "resolution": "1920x1080", "pixel_ratio": 2 }, "webgl_renderer": "Apple M3", "media_devices": { "audio_input": 1, "audio_output": 1, "video_input": 1 }, "geolocation": { "latitude": 40.7128, "longitude": -74.006, "accuracy": 100 }, "noise": { "canvas": true, "webgl": true, "client_rects": true }, "canvas": "off", "webgl": "off", "webrtc": "1.1.1.1", "ports_protection": [ 3389, 5900, 5901 ] }, "proxy": "socks5://user:pass@1.1.1.1:5555", "extensions": [ "C:\\extension1", "C:\\extension2" ], "cookies": [ { "domain": ".google.com", "name": "1P_JAR", "value": "2021-11-10-11", "path": "/", "expires": 1639134293, "secure": true, "http_only": false, "same_site": "none" } ], "behavior": { "urls": [ "https://google.com/" ], "args": [ "--flag" ], "headless": false, "remote_debugging_port": 61374, "timeout": 3 }}headers = { 'X-Token': 'Your Token', 'Content-Type': 'application/json'}response = requests.post(url, headers=headers, json=body)print(response.json())<?php$url = "http://127.0.0.1:3030/start/instant";$token = "Your Token"; $body = '{ "name": "Profile 1", "os": "macos", "version": 142, "smart": "standard", "fingerprint": { "navigator": { "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36", "language": "en-GB", "languages": [ "en-GB", "en", "en-US", "en" ], "timezone": "America/New_York", "hardware_concurrency": 8, "device_memory": 8 }, "screen": { "resolution": "1920x1080", "pixel_ratio": 2 }, "webgl_renderer": "Apple M3", "media_devices": { "audio_input": 1, "audio_output": 1, "video_input": 1 }, "geolocation": { "latitude": 40.7128, "longitude": -74.006, "accuracy": 100 }, "noise": { "canvas": true, "webgl": true, "client_rects": true }, "canvas": "off", "webgl": "off", "webrtc": "1.1.1.1", "ports_protection": [ 3389, 5900, 5901 ] }, "proxy": "socks5://user:pass@1.1.1.1:5555", "extensions": [ "C:\\extension1", "C:\\extension2" ], "cookies": [ { "domain": ".google.com", "name": "1P_JAR", "value": "2021-11-10-11", "path": "/", "expires": 1639134293, "secure": true, "http_only": false, "same_site": "none" } ], "behavior": { "urls": [ "https://google.com/" ], "args": [ "--flag" ], "headless": false, "remote_debugging_port": 61374, "timeout": 3 }}';$headers = array( 'X-Token: '.$token, 'Content-Type: application/json');$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);curl_setopt($ch, CURLOPT_POSTFIELDS, $body);$data = curl_exec($ch);if (curl_errno($ch)) { print "Error: " . curl_error($ch);} else { var_dump($data); curl_close($ch);}?>// Requires tokio with features = ["macros", "rt-multi-thread"]// Requires reqwest with features = ["json"]// Requires serde_json#[tokio::main]async fn main() { let url = "http://127.0.0.1:3030/start/instant"; let token = "Token"; let body = serde_json::json!( { "name": "Profile 1", "os": "macos", "version": 142, "smart": "standard", "fingerprint": { "navigator": { "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36", "language": "en-GB", "languages": [ "en-GB", "en", "en-US", "en" ], "timezone": "America/New_York", "hardware_concurrency": 8, "device_memory": 8 }, "screen": { "resolution": "1920x1080", "pixel_ratio": 2 }, "webgl_renderer": "Apple M3", "media_devices": { "audio_input": 1, "audio_output": 1, "video_input": 1 }, "geolocation": { "latitude": 40.7128, "longitude": -74.006, "accuracy": 100 }, "noise": { "canvas": true, "webgl": true, "client_rects": true }, "canvas": "off", "webgl": "off", "webrtc": "1.1.1.1", "ports_protection": [ 3389, 5900, 5901 ] }, "proxy": "socks5://user:pass@1.1.1.1:5555", "extensions": [ "C:\\extension1", "C:\\extension2" ], "cookies": [ { "domain": ".google.com", "name": "1P_JAR", "value": "2021-11-10-11", "path": "/", "expires": 1639134293, "secure": true, "http_only": false, "same_site": "none" } ], "behavior": { "urls": [ "https://google.com/" ], "args": [ "--flag" ], "headless": false, "remote_debugging_port": 61374, "timeout": 3 } } ); let client = reqwest::Client::new(); let response = client .post(url) .header("X-Token", token) .json(&body) .send() .await .expect("Failed to send request") .json::<serde_json::Value>() .await .expect("Failed to parse response"); dbg!(response);}package mainimport ( "bytes" "io" "net/http")func main() { url := "http://127.0.0.1:3030/start/instant" token := "Your Token" body := []byte(` { "name": "Profile 1", "os": "macos", "version": 142, "smart": "standard", "fingerprint": { "navigator": { "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36", "language": "en-GB", "languages": [ "en-GB", "en", "en-US", "en" ], "timezone": "America/New_York", "hardware_concurrency": 8, "device_memory": 8 }, "screen": { "resolution": "1920x1080", "pixel_ratio": 2 }, "webgl_renderer": "Apple M3", "media_devices": { "audio_input": 1, "audio_output": 1, "video_input": 1 }, "geolocation": { "latitude": 40.7128, "longitude": -74.006, "accuracy": 100 }, "noise": { "canvas": true, "webgl": true, "client_rects": true }, "canvas": "off", "webgl": "off", "webrtc": "1.1.1.1", "ports_protection": [ 3389, 5900, 5901 ] }, "proxy": "socks5://user:pass@1.1.1.1:5555", "extensions": [ "C:\\extension1", "C:\\extension2" ], "cookies": [ { "domain": ".google.com", "name": "1P_JAR", "value": "2021-11-10-11", "path": "/", "expires": 1639134293, "secure": true, "http_only": false, "same_site": "none" } ], "behavior": { "urls": [ "https://google.com/" ], "args": [ "--flag" ], "headless": false, "remote_debugging_port": 61374, "timeout": 3 } } `) client := http.Client{} req, err := http.NewRequest("POST", url, nil) if err != nil { panic(err) } req.Header.Add("X-Token", token) req.Header.Add("Content-Type", "application/json") req.Body = io.NopCloser(bytes.NewReader(body)) resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) println(string(body))}var url = "http://127.0.0.1:3030/start/instant";var token = "Your Token"; var body = """{ "name": "Profile 1", "os": "macos", "version": 142, "smart": "standard", "fingerprint": { "navigator": { "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36", "language": "en-GB", "languages": [ "en-GB", "en", "en-US", "en" ], "timezone": "America/New_York", "hardware_concurrency": 8, "device_memory": 8 }, "screen": { "resolution": "1920x1080", "pixel_ratio": 2 }, "webgl_renderer": "Apple M3", "media_devices": { "audio_input": 1, "audio_output": 1, "video_input": 1 }, "geolocation": { "latitude": 40.7128, "longitude": -74.006, "accuracy": 100 }, "noise": { "canvas": true, "webgl": true, "client_rects": true }, "canvas": "off", "webgl": "off", "webrtc": "1.1.1.1", "ports_protection": [ 3389, 5900, 5901 ] }, "proxy": "socks5://user:pass@1.1.1.1:5555", "extensions": [ "C:\\extension1", "C:\\extension2" ], "cookies": [ { "domain": ".google.com", "name": "1P_JAR", "value": "2021-11-10-11", "path": "/", "expires": 1639134293, "secure": true, "http_only": false, "same_site": "none" } ], "behavior": { "urls": [ "https://google.com/" ], "args": [ "--flag" ], "headless": false, "remote_debugging_port": 61374, "timeout": 3 }}"""var client = new HttpClient();client.DefaultRequestHeaders.Add("X-Token", token);client.DefaultRequestHeaders.Add("Content-Type", "application/json");var contentBody = new StringContent(body, Encoding.UTF8, "application/json");var response = await client.PostAsync(url, contentBody);var content = await response.Content.ReadAsStringAsync();Console.WriteLine(content);Ответ
Данные ответа
Prop
Type
Пример ответа
{
success: true,
profile_id: "b437dea0-e465-4a18-b2b4-db2521df9eae",
port: 60756
}Остановка Instant профиля
Пример остановки Instant профиля
Обратите внимание, вместо PROFILE_ID нужно вставить ID запущенного Instant профиля!
const url = "http://127.0.0.1:3030/stop/instant/PROFILE_ID"; const options = { method: "GET", headers: { "X-Token": "Your Token", }, };fetch(url, options) .then((response) => { response.json().then((data) => { console.log(data); }); }) .catch((error) => { console.error(error); });import requestsurl = 'http://127.0.0.1:3030/stop/instant/PROFILE_ID' headers = { 'X-Token': 'Your Token', 'Content-Type': 'application/json'}response = requests.get(url, headers=headers)print(response.json())<?php$url = "http://127.0.0.1:3030/stop/instant/PROFILE_ID";$token = "Your Token"; $headers = array( 'X-Token: '.$token, 'Content-Type: application/json');$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);$data = curl_exec($ch);if (curl_errno($ch)) { print "Error: " . curl_error($ch);} else { var_dump($data); curl_close($ch);}?>// Requires tokio with features = ["macros", "rt-multi-thread"]// Requires reqwest with features = ["json"]// Requires serde_json#[tokio::main]async fn main() { let url = "http://127.0.0.1:3030/stop/instant/PROFILE_ID"; let token = "Token"; let client = reqwest::Client::new(); let response = client .get(url) .header("X-Token", token) .send() .await .expect("Failed to send request") .json::<serde_json::Value>() .await .expect("Failed to parse response"); dbg!(response);}package mainimport ( "io" "net/http")func main() { url := "http://127.0.0.1:3030/stop/instant/PROFILE_ID" token := "Your Token" client := http.Client{} req, err := http.NewRequest("GET", url, nil) if err != nil { panic(err) } req.Header.Add("X-Token", token) resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) println(string(body))}var url = "http://127.0.0.1:3030/stop/instant/PROFILE_ID";var token = "Your Token"; var client = new HttpClient();client.DefaultRequestHeaders.Add("X-Token", token);var response = await client.GetAsync(url);var content = await response.Content.ReadAsStringAsync();Console.WriteLine(content);Ответ
Данные ответа
Prop
Type
Пример ответа
{
success: true,
profile_id: "75b4f9e6-fa6a-45a9-b272-f35d06a749d1",
folder_id: "00000000-0000-0000-0000-000000000000",
cookies: [{
"domain": ".google.com",
"name": "1P_JAR",
"value": "2021-11-10-11",
"path": "/",
"expires": 1639134293,
"secure": true,
"http_only": false,
"same_site": "none"
}]
}