Cliente HTTP avançado com TLS fingerprinting, rotação automática de proxies e recuperação inteligente para web scraping profissional
Project description
Notify TLS Client
Cliente HTTP avançado em Python com suporte a TLS/SSL customizado, fingerprinting de navegadores e rotação automática de proxies. Construído sobre a biblioteca tls-client com funcionalidades adicionais para web scraping e automação resiliente.
🚀 Características Principais
- Fingerprinting TLS Avançado: Emula múltiplos navegadores (Chrome, Firefox, Safari, Edge, Mobile)
- Rotação Automática: Proxies e client identifiers com políticas configuráveis
- Recuperação Automática: Reconexão inteligente em erros e respostas proibidas
- Thread-Safe: Uso seguro em ambientes multi-threaded
- Configuração Modular: Sistema de configuração baseado em objetos reutilizáveis
- Presets Prontos: Configurações pré-definidas para casos de uso comuns
- HTTP/3 Support: Suporte opcional a QUIC/HTTP3
📦 Instalação
pip install notify-tls-client
Requisitos
- Python >= 3.12
- Sistema operacional: Windows, macOS, Linux (x86_64, ARM64)
🎯 Quick Start
Uso Básico
from notify_tls_client import NotifyTLSClient
# Cliente com configuração padrão
client = NotifyTLSClient()
# Fazer requisição
response = client.get("https://api.example.com/data")
print(response.status_code)
print(response.json())
Usando Presets (Recomendado)
from notify_tls_client import NotifyTLSClient
from notify_tls_client.config import ClientConfiguration
from notify_tls_client.core.proxiesmanager import ProxiesManagerLoader
# Carregar proxies
proxies = ProxiesManagerLoader().from_txt("proxies.txt")
# Preset para scraping agressivo
config = ClientConfiguration.aggressive(proxies)
client = NotifyTLSClient(config)
# Fazer múltiplas requisições
for i in range(100):
response = client.get("https://example.com/api/endpoint")
print(f"Request {i}: {response.status_code}")
Configuração Customizada
from notify_tls_client import NotifyTLSClient
from notify_tls_client.config import (
ClientConfiguration,
RotationConfig,
RecoveryConfig,
ClientConfig
)
config = ClientConfiguration(
proxies_manager=proxies,
rotation=RotationConfig(
requests_limit_same_proxy=50,
requests_limit_same_client_identifier=200,
random_tls_extension_order=True
),
recovery=RecoveryConfig(
instantiate_new_client_on_forbidden_response=True,
instantiate_new_client_on_exception=True,
change_client_identifier_on_forbidden_response=True,
status_codes_to_forbidden_response_handle=[403, 429, 503]
),
client=ClientConfig(
client_identifiers=["chrome_133", "firefox_120", "safari_17_0"],
disable_http3=False,
debug_mode=False
)
)
client = NotifyTLSClient(config)
📚 Presets Disponíveis
Simple
Uso básico com rotação de proxies padrão.
config = ClientConfiguration.simple(proxies)
Aggressive
Para scraping intensivo com recuperação automática completa.
config = ClientConfiguration.aggressive(proxies)
- Troca proxy a cada 10 requisições
- Troca client identifier a cada 50 requisições
- Recuperação automática em erros e 403/429/503
- Múltiplos client identifiers
Stealth
Foco em evitar detecção através de diversidade.
config = ClientConfiguration.stealth(proxies)
- 4 client identifiers diferentes
- Ordem de extensões TLS randomizada
- Rotação moderada (100 req/proxy)
Mobile
Simula dispositivos móveis.
# Android
config = ClientConfiguration.mobile(proxies, platform="android")
# iOS
config = ClientConfiguration.mobile(proxies, platform="ios")
🔧 Funcionalidades Avançadas
Rotação de Proxies
from notify_tls_client.core.proxiesmanager import ProxiesManagerLoader
# Carregar de arquivo
proxies = ProxiesManagerLoader().from_txt("proxies.txt")
# Formato do arquivo (um por linha):
# host:port
# host:port:username:password
# http://username:password@host:port
Client Identifiers Suportados
Desktop:
- Chrome:
chrome_133,chrome_131,chrome_120, etc. - Firefox:
firefox_120,firefox_117,firefox_110, etc. - Safari:
safari_17_0,safari_16_0, etc. - Edge, Opera
Mobile:
- Android:
okhttp4_android_13,okhttp4_android_12, etc. - iOS:
safari_ios_16_0,safari_ios_15_6, etc.
Recuperação Automática
config = ClientConfiguration(
recovery=RecoveryConfig(
# Criar nova sessão em respostas proibidas
instantiate_new_client_on_forbidden_response=True,
# Criar nova sessão em exceções
instantiate_new_client_on_exception=True,
# Trocar identifier em respostas proibidas
change_client_identifier_on_forbidden_response=True,
# Status codes que acionam recuperação
status_codes_to_forbidden_response_handle=[403, 429, 503]
)
)
Headers Customizados
config = ClientConfiguration(
client=ClientConfig(
default_headers={
"User-Agent": "Mozilla/5.0...",
"Accept-Language": "pt-BR,pt;q=0.9",
"Custom-Header": "value"
}
)
)
# Ou por requisição
response = client.get(
"https://example.com",
headers={"Authorization": "Bearer token"}
)
Cookies
# Obter todos os cookies
cookies = client.get_cookies()
# Obter cookie específico
value = client.get_cookie_by_name("session_id")
# Definir cookie
client.set_cookie("name", "value")
🔒 Thread Safety
A biblioteca é thread-safe e pode ser usada em ambientes multi-threaded:
import concurrent.futures
client = NotifyTLSClient(ClientConfiguration.aggressive(proxies))
def make_request(url):
return client.get(url)
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
urls = ["https://example.com"] * 100
results = list(executor.map(make_request, urls))
📊 Logging
import logging
# Habilitar logs de debug
logging.basicConfig(level=logging.DEBUG)
# Ou configurar apenas para notify_tls_client
logger = logging.getLogger("notify_tls_client")
logger.setLevel(logging.DEBUG)
🛠️ Métodos HTTP Suportados
# GET
response = client.get(url, params={"key": "value"})
# POST
response = client.post(url, json={"data": "value"})
response = client.post(url, data="form data")
# PUT
response = client.put(url, json={"data": "value"})
# PATCH
response = client.patch(url, json={"data": "value"})
# DELETE
response = client.delete(url)
📖 Documentação Completa
Para documentação detalhada sobre arquitetura, componentes internos e exemplos avançados, consulte:
🤝 Contribuindo
Contribuições são bem-vindas! Por favor, leia CONTRIBUTING.md para detalhes sobre nosso código de conduta e processo de submissão de pull requests.
📝 Changelog
Veja CHANGELOG.md para histórico de versões e mudanças.
📄 Licença
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
⚠️ Aviso Legal
Esta biblioteca é fornecida apenas para fins educacionais e de pesquisa. O uso desta ferramenta para violar termos de serviço de websites, realizar scraping não autorizado ou qualquer atividade ilegal é de sua responsabilidade. Os desenvolvedores não se responsabilizam pelo uso indevido desta biblioteca.
🙏 Agradecimentos
- tls-client - Biblioteca Go subjacente para TLS fingerprinting
- Comunidade Python por ferramentas e bibliotecas incríveis
📞 Suporte
- Issues: GitHub Issues
- Discussões: GitHub Discussions
Desenvolvido com ❤️ para a comunidade Python
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file notify_tls_client-2.0.3.tar.gz.
File metadata
- Download URL: notify_tls_client-2.0.3.tar.gz
- Upload date:
- Size: 26.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1f30f1efb15d3ef0c36619afa15e04990e38f5c255b75023a2f5e9c0cc2be4d
|
|
| MD5 |
d3468cd64a92f239627f311edb55a324
|
|
| BLAKE2b-256 |
061856cd40e07c62807f789cb6d121ce5be26f42671a2670e3d996c912fc3b6a
|
File details
Details for the file notify_tls_client-2.0.3-py3-none-any.whl.
File metadata
- Download URL: notify_tls_client-2.0.3-py3-none-any.whl
- Upload date:
- Size: 26.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1532598dd079c99b7fa9e4f77b66fa9f3f9eb2bf9fec8fe17c576fedc3f1be9b
|
|
| MD5 |
03d6ccf4d6148be10862a4d8cbb68f2e
|
|
| BLAKE2b-256 |
a69e67ed30bdc513bc44980000eb0d99d92107ea69b04e43bc2da1a4952bb8c4
|