Resposta rápida
Como utilizo proxies residenciais africanos em Python?
Utilize proxies residenciais africanos em Python ao passar credenciais específicas de cada país geradas para o Requests para um endpoint HTTPS autorizado. A partir de 15 de outubro de 2026, o tráfego AfricaProxies começa em US$ 0,50/GB, sem KYC e com financiamento em cripto. O exemplo valida TLS, define timeouts de conexão/leitura e para em recusas, redirecionamentos ou erros antes que um teste delimitado se torne uma recolha repetida.
Dados de configuração de Python
| Gateway | gw.africaproxies.com |
|---|---|
| porta HTTP(S) | 7777 |
| Suporte de protocolo | HTTP, HTTPS (CONNECT) e SOCKS5 |
| Códigos de países prioritários | NG Nigéria; ZA África do Sul; KE Quénia; GH Gana; TZ Tanzânia; CI Costa do Marfim; SN Senegal; CM Camarões |
| Timeouts de ligação / leitura | 10 / 30 segundos neste exemplo; não são limites de tempo total decorrido |
| Limite de sessão | As sessões com o mesmo IP mantêm esse IP durante o tempo definido (ttl, em minutos), até 30 minutos. O IP pode mudar antes, por exemplo se o dispositivo residencial ficar offline. |
| Taxa | A partir de US$ 0,50/GB |
| tráfego | O uso contabiliza todos os dados enviados e recebidos pelo proxy (upload e download, incluindo cabeçalhos). 1 GB = 1,000,000,000 bytes. Tentativas de conexão que falham antes de chegar ao destino não são contabilizadas. |
Como fazer a primeira requisição com proxy africano em Python?
Prepare um ponto final controlado
Instale Requests no seu ambiente de projeto. Escolha um pequeno endpoint HTTPS que você possua ou tenha permissão para testar e gere o nome de utilizador do proxy completo para o país africano necessário.
Configurar a amostra privadamente
Forneça as credenciais de acesso do proxy gerado através da configuração documentada. Mantenha a verificação TLS ativada, codifique as credenciais para o URL do proxy e utilize tempos limite explícitos de ligação e leitura.
Validar a resposta
Execute a amostra limitada abaixo. Inspecione o endereço de chegada no seu registo de endpoint e verifique esse mesmo endereço em fontes de localização independentes; pare em caso de conteúdo inesperado, recusas ou limites de taxa.
O que devo preparar antes de executar o exemplo?
Prepare um plano de proxies residenciais adquirido e um nome de utilizador de proxy completo gerado para o país necessário. Escolha um pequeno ponto de extremidade HTTPS que possua ou esteja autorizado a testar. Instale Requests no ambiente Python do seu projeto com python -m pip install requests.
Mantenha o teste inicial separado de uma coleção de marketplace. Para uma aplicação nigeriana, queniana, ganense ou sul-africana que possua, utilize um pequeno ponto de extremidade de saúde ou QA e inspecione o log do seu servidor para confirmar a saída de chegada. O exemplo não recolhe dados de marketplace, não faz pedidos nem carrega anúncios pagos ao vivo.
from getpass import getpass
from urllib.parse import quote, urlsplit
import requests
country = input("Country to test (ng, za, ke, gh, tz, ci, sn, cm, et, ug, rw, zm, zw, mz, ao, bw, na, bj, tg, bf, ml, mg, mu, cd): ").strip().lower()
if country not in {"ng", "za", "ke", "gh", "tz", "ci", "sn", "cm", "et", "ug", "rw", "zm", "zw", "mz", "ao", "bw", "na", "bj", "tg", "bf", "ml", "mg", "mu", "cd"}:
raise SystemExit("Choose one country for this example.")
target = input("HTTPS endpoint you own or may test: ").strip()
parts = urlsplit(target)
if parts.scheme != "https" or not parts.hostname or parts.username or parts.password:
raise SystemExit("Use an authorised HTTPS URL without embedded credentials.")
# Generate this full country-specific username in the client area.
user = getpass("Full generated proxy username: ")
password = getpass("Proxy password: ")
if f"-country-{country}" not in user:
raise SystemExit("Generate a username for the selected country first.")
proxy = (
f"http://{quote(user, safe='')}:{quote(password, safe='')}@"
"gw.africaproxies.com:7777"
)
proxies = {"http": proxy, "https": proxy}
try:
with requests.Session() as session:
session.trust_env = False
with session.get(
target, proxies=proxies, timeout=(10, 30), verify=True,
allow_redirects=False, stream=True,
) as response:
if response.status_code in {403, 407, 429}:
raise SystemExit(f"Stop and diagnose HTTP {response.status_code}; no retry.")
if 300 <= response.status_code < 400:
raise SystemExit("Stop: review the redirect destination before requesting it.")
response.raise_for_status()
received = 0
for chunk in response.iter_content(chunk_size=8192):
received += len(chunk)
if received > 131072:
raise SystemExit("Stop: use a smaller control response.")
print({"requested_country": country, "status": response.status_code,
"body_bytes_read": received})
except requests.exceptions.RequestException as error:
# Exception messages can expose URLs: print the class, not credentials or URLs.
raise SystemExit(f"Connection failed: {type(error).__name__}; diagnose before retrying.")
Por que definir explicitamente proxies, certificados e tempos-limite?
As definições explícitas de proxy por pedido impedem que as definições de proxy ambiente selecionem uma rota diferente; trust_env = False também desativa as definições derivadas do ambiente. quote(..., safe='') codifica os componentes das credenciais de acesso antes de entrarem no proxy URL. O código nunca imprime esse URL.
A verificação TLS permanece ativada. Num ambiente gerido que necessite de um conjunto de certificados personalizado, configure o conjunto de confiança correto em vez de desativar a verificação. O par de timeout limita o estabelecimento da ligação e a espera de leitura; não é um prazo total de execução. Estas escolhas seguem a documentação avançada do Requests e a referência API.
Como verificar se a saída pertence ao país solicitado?
Utilize o endereço de origem observado pelo seu próprio ponto de teste e consulte esse mesmo endereço em dois conjuntos de dados de geolocalização com fontes distintas, por exemplo IPinfo e DB-IP. Respeite as regras de acesso de cada fornecedor e registe o país devolvido, o nome da base de dados ou do serviço e a hora. Duas interfaces que usam o mesmo conjunto de dados subjacente não constituem provas independentes.
Se, em alternativa, chamar dois pontos de teste que detetem cada um o IP de quem faz o pedido, as ligações rotativas podem atribuir-lhes saídas diferentes. Compare o mesmo endereço observado ou utilize uma sessão documentada que mantenha o endereço. Uma divergência deve suspender uma comparação que dependa da localização; nenhum dos resultados comprova uma morada física.
Como usar sessões e erros num teste de app africano?
Uma comparação por país deve preservar as definições de mercado e o estado dos cookies separadamente para cada mercado. As sessões de pedidos podem reutilizar ligações, por isso vários pedidos de página não implicam várias saídas diferentes. Modo de rotação: cada nova conexão recebe um IP do conjunto, geralmente diferente. Para receber um novo IP a cada requisição, envie uma requisição por conexão (desative keep-alive). O modo de sessão fixa mantém um IP pelo tempo de sessão definido. O glossário explica a diferença entre a sessão do proxy e os cookies da aplicação.
Uma resposta 200 ainda precisa de conter o resultado esperado; um desafio de acesso pode aparecer com um estado de sucesso. Pare em conteúdos inesperados, recusas ou limites de taxa. O exemplo não tem configuração de tentativa automática e revê os redirecionamentos antes de os seguir. Quando a rota de controlo funciona mas o alvo não, preserve essa distinção num relatório de suporte.
Perguntas de configuração de Python
Posso usar uma sessão Python para vários países?
Uma sessão pode reter cookies e reutilizar conexões. Utilize execuções documentadas separadas para Nigéria, África do Sul, Quénia e Gana para que as definições de país e o estado da aplicação não se misturem. Uma conexão reutilizada pode manter a sua saída; não interprete cada chamada .get() como rotação garantida.
Por que a senha usa codificação de URL?
O proxy URL contém componentes de credenciais de acesso. Caracteres como @, : ou / podem, de outra forma, alterar a forma como ele é analisado. A amostra codifica tanto o nome de utilizador como a palavra-passe e nunca imprime a URL concluída. Introduza segredos nos campos privados em vez de os comprometer na fonte.
Por que não desativar a verificação TLS quando um teste falha?
A verificação de certificado protege a ligação de destino HTTPS. Mantenha-a ativada e diagnostique a cadeia de certificados ou o pacote de confiança necessário. Desativá-la ocultaria a causa e alteraria a segurança do teste em vez de confirmar que a rota africana está configurada corretamente.
O par de tempos-limite limita toda a tarefa a 40 segundos?
Não. O exemplo fornece limites de espera de ligação e leitura separados. Solicita que se documente que esses valores não são prazos totais de relógio. A resposta também está limitada a um corpo pequeno para este teste de controlo; trabalhos de projetos maiores precisam do seu próprio orçamento explícito e âmbito permitido.
Devo tentar novamente um 403 ou 429 através de uma saída diferente?
Não. A amostra para para que a recusa ou o limite de taxa possa ser revisto. Verifique o método de acesso permitido do alvo e a sua carga de trabalho autorizada. Um país diferente ou IP não é permissão para continuar a recolha após a recusa. Preserve a resposta para a revisão de acesso do projeto.
Como confirmar a independência das evidências por país?
Comece com um endereço de saída observado e compare o seu país em dois conjuntos de dados distintos. Registe os nomes da fonte e o tempo de pesquisa. Chamar dois endpoints de deteção rotativos pode observar endereços diferentes, pelo que esse procedimento não validaria a mesma saída. Pause um teste sensível à cidade se as evidências divergirem.
Fontes primárias de configuração verificadas em 14 de outubro de 2026 (5)
- Requests advanced usage: proxies, sessions, TLS and timeouts — Requests (2026-10-14)
- Requests developer interface — Requests (2026-10-14)
- Python urllib.parse: URL component quoting — Python Software Foundation (2026-10-14)
- IPinfo developer resource — IPinfo (2026-10-14)
- DB-IP geolocation API — DB-IP (2026-10-14)