Encaminhamento SOCKS no aiohttp com aiohttp-socks
Use um conector compatível com SOCKS em vez de copiar um exemplo antigo de proxy do aiohttp com classes de conector removidas.
O aiohttp documenta o suporte a proxy HTTP através das suas opções de pedido. Um endpoint SOCKS precisa de uma implementação que fale SOCKS. Alterar a porta de um URL de proxy para 1080 não fornece essa implementação.
Dentro de uma função async, use o conector fornecido pelo projeto mantido aiohttp-socks:
import aiohttp
from aiohttp_socks import ProxyConnector
connector = ProxyConnector.from_url('socks5://203.0.113.10:1080')
async with aiohttp.ClientSession(connector=connector) as session:
async with session.get('https://example.com/') as response:
body = await response.read()Isto pressupõe que o pacote do conector já está disponível e é compatível com a versão do aiohttp na aplicação. O endpoint é ilustrativo; a lista de proxies SOCKS5 oferece candidatos públicos para o URL do conector. Configure a política de tempo limite e de tamanho da resposta para a carga real.
As respostas antigas referem pacotes e nomes de conector diferentes: aiosocks, aiosocksy e aiohttp-socks não são caminhos de importação intermutáveis. Leia os requisitos e o exemplo do pacote realmente usado. Combinar a classe de um projeto com os argumentos de outro pode falhar antes de se tentar qualquer ligação ao proxy.
Mantenha o conector e a vida da sessão juntos e verifique o comportamento de resolução de nomes de anfitrião onde for importante. Passar um URL SOCKS a uma opção de proxy HTTP não relacionada não substitui o percurso documentado do conector.