import random def get_headers(): # ОС Chrome/Firefox platforms = [ 'Windows NT 10.0; Win64; x64', 'Windows NT 10.0; WOW64', 'Macintosh; Intel Mac OS X 10_15_7', 'X11; Linux x86_64', ] # Chrome версии chrome_major = random.randint(120, 128) chrome_build = random.randint(6000, 9999) chrome_patch = random.randint(10, 200) chrome_ua = ( f"Mozilla/5.0 ({random.choice(platforms)}) " f"AppleWebKit/537.36 (KHTML, like Gecko) " f"Chrome/{chrome_major}.0.{chrome_build}.{chrome_patch} Safari/537.36" ) # Firefox версии ff_ver = random.randint(110, 125) firefox_ua = ( f"Mozilla/5.0 ({random.choice(platforms)}; rv:{ff_ver}.0) " f"Gecko/20100101 Firefox/{ff_ver}.0" ) # Выбираем браузер user_agent = random.choice([chrome_ua, firefox_ua]) # sec-ch-ua зависит только от Chrome if "Chrome" in user_agent: sec_ch_ua = f'"Not_A Brand";v="8", "Chromium";v="{chrome_major}", "Google Chrome";v="{chrome_major}"' sec_ch_mob = "?0" sec_platform = '"Windows"' if "Windows" in user_agent else '"macOS"' if "Macintosh" in user_agent else '"Linux"' else: # Firefox их не отправляет sec_ch_ua = None sec_ch_mob = None sec_platform = None # Accept-Language accept_lang = random.choice([ "ru-RU,ru;q=0.9,en-US;q=0.8", "ru-RU,ru;q=0.8,en-US;q=0.7", "ru-RU;q=0.9,ru;q=0.8,en-US;q=0.7", "ru-RU;q=0.8,ru;q=0.7,en-US;q=0.9", "ru;q=0.9,en;q=0.8", "ru;q=0.8,en;q=0.7", "ru;q=0.7,en;q=0.9", "en-US,en;q=0.9,ru-RU,ru;q=0.8", "en-US,en;q=0.8,ru-RU,ru;q=0.9", "en-US;q=0.9,ru-RU,ru;q=0.7", "en-US;q=0.8,ru-RU,ru;q=0.9", "en-US;q=0.7,ru-RU,ru;q=0.8", "en;q=0.9,ru;q=0.8", "en;q=0.8,ru;q=0.9", "en;q=0.7,ru;q=0.7", ]) # Реалистичные fetch-заголовки Chrome sec_fetch_site = random.choice(["none", "same-site", "same-origin", "cross-site"]) sec_fetch_mode = "navigate" sec_fetch_user = "?1" sec_fetch_dest = "document" # Заголовки в случайном порядке как в браузере headers_list = [ ("User-Agent", user_agent), ("Accept", "text/html,application/json,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"), ("Accept-Language", accept_lang), ("Accept-Encoding", "gzip, deflate, br, zstd"), ("Connection", "keep-alive"), ("Upgrade-Insecure-Requests", "1"), ] if sec_ch_ua: headers_list.extend([ ("sec-ch-ua", sec_ch_ua), ("sec-ch-ua-mobile", sec_ch_mob), ("sec-ch-ua-platform", sec_platform), ("Sec-Fetch-Site", sec_fetch_site), ("Sec-Fetch-Mode", sec_fetch_mode), ("Sec-Fetch-User", sec_fetch_user), ("Sec-Fetch-Dest", sec_fetch_dest), ]) # Перемешиваем порядок (!) — браузеры могут менять порядок random.shuffle(headers_list) # Превращаем в dict headers = {k: v for k, v in headers_list} return headers