Files
bird_list_ip/include/http_header.py

86 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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([
"en-US,en;q=0.9",
"en-US,en;q=0.8",
"ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
"en;q=0.8",
])
# Реалистичные 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/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