Skip to main content

Генерация User-Agent и HTTP-заголовков на ядре Go

Project description

GitHub: py-fake-useragent

Библиотека Python+Go для генерации актуальных и правдоподобных строк User-Agent и полных наборов HTTP-заголовков. py-fake-useragent - это скомпилированная библиотека go-fake-useragent для Python через cgo чтобы не переписывать одну и туже логику. Работает через ctypes.

В отличие от других подобных библиотек, py-fake-useragent не использует статичные, захардкоженные или обновляемые вручную списки юзер-агентов. Вместо этого она динамически получает последние версии браузеров (Chrome, Edge) из официальных источников (Google, Microsoft), обеспечивая постоянную актуальность генерируемых данных.

Поддерживаемые браузеры

Только эти два десктопных браузера:

  • Google Chrome
  • Microsoft Edge

Потому что цель подобных библиотек - обеспечить маскировку под реальные массовые браузеры. Добавление остальных браузеров - бессмысленно, т.к. их доля в десктопном сегменте незначительная. Использование редких юзер-агентов - противоречит цели.

Особенности

  • Динамическое обновление: версии браузеров загружаются из официальных API и репозиториев.
  • Высокая отказоустойчивость и многоуровневая система фоллбэка:
    1. кэш на диске (опционально).
    2. параллельные сетевые запросы к нескольким источникам (какой-нибудь да ответит!).
    3. математическая аппроксимация версии на основе текущей даты как крайняя мера.
  • Генерация полных заголовков: может генерировать не только User-Agent, но и соответствующие ему sec-ch-ua и прочие заголовки, имитируя реальный браузер (а уже в клиентском коде можно к ним добавить свои).
  • Кэширование на диске: ускоряет инициализацию при повторных запусках и снижает количество сетевых запросов.
  • Поддержка поисковых ботов: генерирует заголовки для маскировки под Googlebot, BingBot и YandexBot.
  • Нулевые зависимости: используется только стандартная библиотека Go.

Установка

uv add py_fake_useragent

или:

pip install py_fake_useragent

Использование

import logging
from json import dumps

from py_fake_useragent import UserAgent, CrawlerType

# настройка стандартного логгера Python,
# для большей скорости лучше использовать: https://github.com/microsoft/picologging
logging.basicConfig(level=logging.DEBUG, format='[%(levelname)s] %(message)s')
py_logger = logging.getLogger('GoUserAgent')

if __name__ == '__main__':
    print('--- инициализация с кэшем и логгером ---')
    ua = UserAgent(use_disk_cache=True, logger=py_logger)

    print('\n--- получение User-Agent ---')
    random_ua = ua.get()
    print(f'Случайный UA: {random_ua}')

    print('\n--- получение заголовков ---')
    headers = ua.get_headers('https://example.com/path')
    print(dumps(headers, indent=2))

    print('\n--- получение заголовков краулера ---')
    google_headers = ua.get_crawler_headers(CrawlerType.GOOGLE)
    print('Google Bot:\n', dumps(google_headers, indent=2))

    print('\n--- явное закрытие (не обязательно, но рекомендуется если библиотека не будет использоваться дальше) ---')
    ua.close()

    print('\n--- инициализация без кэша (будет использована аппроксимация, если нет сети)')
    print('и с контекстным менеджером `with` для автоматического управления ресурсами ---\n')

    with UserAgent(use_disk_cache=False) as ua:
        ua_no_cache = ua.get()
        print(f'UA без кэша: {ua_no_cache}')
        print(f'заголовки без кэша: {dumps(ua.get_headers("https://site.ru/url/path"), indent=2)}')

выходные данные:

--- инициализация с кэшем и логгером ---
[DEBUG] time=2025-08-26T14:15:22.168+05:00 level=DEBUG msg="успешно загружены версии User-Agent из кэша на диске"

--- получение User-Agent ---
Случайный UA: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.7258.67 Safari/537.36

--- получение заголовков ---
{
  "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
  "accept-language": "en-US,en;q=0.9",
  "connection": "keep-alive",
  "origin": "https://example.com",
  "priority": "u=0, i",
  "referer": "https://example.com",
  "sec-ch-ua": "\"Not;A_Brand\";v=\"99\", \"Chromium\";v=\"139\", \"Google Chrome\";v=\"139\"",
  "sec-ch-ua-arch": "\"x86\"",
  "sec-ch-ua-bitness": "\"64\"",
  "sec-ch-ua-form-factors": "\"Desktop\"",
  "sec-ch-ua-full-version": "\"139.0.7258.138\"",
  "sec-ch-ua-mobile": "?0",
  "sec-ch-ua-model": "\"\"",
  "sec-ch-ua-platform": "\"Windows\"",
  "sec-ch-ua-platform-version": "\"19.0.0\"",
  "sec-ch-viewport-height": "\"676\"",
  "sec-ch-viewport-width": "\"1472\"",
  "sec-fetch-dest": "document",
  "sec-fetch-mode": "navigate",
  "sec-fetch-site": "same-origin",
  "sec-fetch-user": "?1",
  "upgrade-insecure-requests": "1",
  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.7258.138 Safari/537.36"
}

--- получение заголовков краулера ---
Google Bot:
 {
  "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  "accept-encoding": "gzip, deflate, br",
  "accept-language": "en-US,en;q=0.9",
  "from": "googlebot(at)google.com",
  "user-agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/139.0.7258.139 Safari/537.36"
}

--- явное закрытие (не обязательно) ---

--- инициализация без кэша (будет использована аппроксимация, если нет сети)
и с контекстным менеджером `with` для автоматического управления ресурсами ---

UA без кэша: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.7204.169 Safari/537.36
заголовки без кэша: {
  "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
  "accept-language": "en-US,en;q=0.9",
  "connection": "keep-alive",
  "origin": "https://site.ru",
  "priority": "u=0, i",
  "referer": "https://site.ru",
  "sec-ch-ua": "\"Not-A/Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Google Chrome\";v=\"138\"",
  "sec-ch-ua-arch": "\"x86\"",
  "sec-ch-ua-bitness": "\"64\"",
  "sec-ch-ua-form-factors": "\"Desktop\"",
  "sec-ch-ua-full-version": "\"138.0.7204.170\"",
  "sec-ch-ua-mobile": "?0",
  "sec-ch-ua-model": "\"\"",
  "sec-ch-ua-platform": "\"Windows\"",
  "sec-ch-ua-platform-version": "\"19.0.0\"",
  "sec-ch-viewport-height": "\"712\"",
  "sec-ch-viewport-width": "\"1312\"",
  "sec-fetch-dest": "document",
  "sec-fetch-mode": "navigate",
  "sec-fetch-site": "same-origin",
  "sec-fetch-user": "?1",
  "upgrade-insecure-requests": "1",
  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.7204.170 Safari/537.36"
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

py_fake_useragent-0.1.1-py3-none-win_amd64.whl (2.8 MB view details)

Uploaded Python 3Windows x86-64

py_fake_useragent-0.1.1-py3-none-musllinux_1_1_x86_64.whl (2.8 MB view details)

Uploaded Python 3musllinux: musl 1.1+ x86-64

py_fake_useragent-0.1.1-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

py_fake_useragent-0.1.1-py3-none-macosx_14_0_arm64.whl (2.7 MB view details)

Uploaded Python 3macOS 14.0+ ARM64

File details

Details for the file py_fake_useragent-0.1.1-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for py_fake_useragent-0.1.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 f6e494f01c40fbbb8474cbe78a71aa9e02c18bbb330266495913ab34100d3c2d
MD5 758662f5cbed5908b0a876e0b93c50ad
BLAKE2b-256 9759c523f834e458371e23a03b8e25fec49ea03da658c9ab3c00e283f1f912bc

See more details on using hashes here.

File details

Details for the file py_fake_useragent-0.1.1-py3-none-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for py_fake_useragent-0.1.1-py3-none-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 783eb5a25258b818be02791b6cd258d7df9ae3b35f41539be85b93fed72d6035
MD5 bef58cee037af1a148b60010075aace3
BLAKE2b-256 f83440804037046cae9030f652788496dc40aac6eba155fc8603d7f4888fff79

See more details on using hashes here.

File details

Details for the file py_fake_useragent-0.1.1-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for py_fake_useragent-0.1.1-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 18277aeca0ade6fc6e8566f86ac47abf7887474c5d3936ba3c2c801d1f7a5058
MD5 2310d3e734103f4a845cad8d3a6adbf7
BLAKE2b-256 4bb9c63779cfcfb87612bfffa2816d9f062e1c974925d277091247188d742f57

See more details on using hashes here.

File details

Details for the file py_fake_useragent-0.1.1-py3-none-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for py_fake_useragent-0.1.1-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f47b7585033d4237e3443ed762b7d93bf0a3312635aeb779ef81c19aa276e5d7
MD5 38104d58b3121506d96fe995ad9cdfec
BLAKE2b-256 90618a649844bd7e40d8315e0982ed76b55b8606daed25921fb496d08b4f7191

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page