Обход Cloudflare при запросе

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Автор SCULPTOR
Статья написана для
Конкурса статей #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.
 
Сверху Снизу