Vision

Instant профили

Введение

Vision предоставляет возможность запуска "одноразового" профиля. Данный профиль будет запущен сразу после выполнения запроса на запуск, а по закрытии данный профиль будет удален и недоступен для последующего использования. При этом данные из профиля (Cookies) будут находиться в ответе на запрос закрытия профиля.

Данный функционал полезен автоматизаторам, работа которых не подразумевает использование профиля после его первого запуска и последующей остановки.

Важно! Все параметры, описанные ниже, являются опциональными.

Для старта профиля не требуется никаких параметров, указывайте их только в случае, если необходимо запустить профиль с определёнными значениями.

Базовый URL для запуска Instant профиля

GET
http://127.0.0.1:3030/start/instant

Используйте метод GET для запуска профиля без параметров. В этом случае профиль будет запущен со случайным отпечатком, ОС отпечатка будет совпадать с вашей.

POST
http://127.0.0.1:3030/start/instant

Используйте метод POST для запуска профиля с параметрами, указанными в теле запроса.

Базовый URL для остановки Instant профиля

GET
http://127.0.0.1:3030/stop/instant/{PROFILE_ID}

Запрос

Заголовки запроса

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"
}]
}

На этой странице