D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Автор SCULPTOR
Статья написана для Конкурса статей #10
И так, недавно делая чекер на одну из площадок, столкнулся с таким типом капчи Cloudflare "Just a moment", появляеться когда используешь обычный клиент для запросов, типо axios
Но есть еффективое решение, которое позволит не переходить на емуляцию, это использование TLS фингерпринтов
Фингерпринт (отпечаток браузера) – это уникальный идентификатор конфигураций веб-браузера и операционной системы, который формируется на основе собранных данных различными технологиями отслеживания. При этом не используются традиционные методы отслеживания, такие как IP адреса и уникальные файлы cookie.
Чтобы использовать TLS фингерпринты, можно воспользоваться библиотекой tlsclientwrapper. Эта библиотека позволяет создавать клиенты, которые эмулируют поведение браузера и могут обходить блокировку Cloudflare.
Рассмотрим на примере кода с POST запросом:
JavaScript: Скопировать в буфер обмена
Для предотвращения блокировки по IP использовать резидентные proxy.
Статья написана для Конкурса статей #10
И так, недавно делая чекер на одну из площадок, столкнулся с таким типом капчи Cloudflare "Just a moment", появляеться когда используешь обычный клиент для запросов, типо axios
Но есть еффективое решение, которое позволит не переходить на емуляцию, это использование TLS фингерпринтов
Фингерпринт (отпечаток браузера) – это уникальный идентификатор конфигураций веб-браузера и операционной системы, который формируется на основе собранных данных различными технологиями отслеживания. При этом не используются традиционные методы отслеживания, такие как IP адреса и уникальные файлы cookie.
Чтобы использовать TLS фингерпринты, можно воспользоваться библиотекой tlsclientwrapper. Эта библиотека позволяет создавать клиенты, которые эмулируют поведение браузера и могут обходить блокировку Cloudflare.
Рассмотрим на примере кода с POST запросом:
JavaScript: Скопировать в буфер обмена
Код:
import { ModuleClient, SessionClient } from 'tlsclientwrapper';
const moduleClient = new ModuleClient();
export function getRandomItem<T>(arr: T[]): string {
return arr[Math.floor(Math.random() * arr.length)] as string;
}
const proxy = [""]; // массив с проксями (формат должен быть username:pass:ip:port)
(async function() {
try {
let proxy : any = getRandomItem(proxy);
const loginSession = new SessionClient(moduleClient, {
defaultHeaders: { 'User-Agent': 'Chrome/131.0.0.0' },
proxyUrl: socks5://" + proxy,
});
const res = await loginSession.post("https://www.site.com/sign_in", "body запроса", {
"headers": {
"accept": "application/json",
"accept-language": "uk-UA,uk;q=0.9,en-US;q=0.8,en;q=0.7",
"accept-version": "v1",
"content-type": "application/json",
"device-id": "d8b0a4d1-48d0-4e26-8c52-9377cf5e70d6",
"priority": "u=1, i",
"sec-ch-ua": "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"Referer": "https://www.grailed.com/",
"Referrer-Policy": "strict-origin-when-cross-origin"
}
if(res.status == 429) {
deleteProxy(proxy.join(":")); // можно реализовать метод который удаляет прокси если фрод
throw new Error("429");
}
if(res.status == 200) {
console.log(res.data)
});
} catch {}
})();
Для предотвращения блокировки по IP использовать резидентные proxy.