socks.set_default_proxy() guarda padrões para futuros objetos socksocket do PySocks. Não substitui a classe socket nativa do Python. Por isso, não redireciona o ftplib só porque a chamada acontece antes de uma conexão FTP.

Siga os construtores, não a variável que guarda a URL do proxy. O ftplib cria uma conexão de controle e conexões adicionais de transferência. No FTP passivo, um login bem-sucedido prova apenas que a conexão de controle funcionou; o socket de dados usado para uma listagem ou transferência de arquivo também precisa da rota pretendida.

Uma receita que substitui socket.socket ou envolve um módulo faz outra coisa além de definir padrões do PySocks. Pode afetar outras bibliotecas que compartilham esse módulo. Restaurar o original depois não torna as conexões simultâneas isoladas da alteração.

Uma subclasse personalizada de ftplib pode cobrir os caminhos de conexão, mas as partes internas copiadas carregam as premissas da versão do Python de onde vieram, incluindo sentinelas de timeout e tratamento de protocolo. Atualizações da biblioteca padrão não atualizam a cópia.

Escolha um cliente mantido ou uma integração suportada para o proxy e o modo FTP necessários. Um exemplo de download FTP passivo com PycURL ilustra um caminho de cliente separado. Para uma personalização de responsabilidade da aplicação, identifique qual construtor abre cada socket de controle e de dados e preserve o comportamento upstream que ele substitui. Um valor de proxy correto só é útil quando esses construtores realmente o utilizam.

Artigos relacionados