IP e porta do proxy: de qual formato seu aplicativo precisa?
Converta uma entrada da lista em uma URL HTTP ou SOCKS, preencha campos separados de host e porta e formate endereços IPv6 corretamente.
Alguns aplicativos pedem IP:port. Outros precisam de uma URL iniciada por http:// ou socks5://. As configurações do navegador costumam separar endereço e porta em campos diferentes. Assim, o mesmo endpoint pode aparecer em vários formatos sem que seu endereço mude.
Uma entrada IPv4
Suponha que uma lista de proxies HTTP forneça o proxy HTTP de exemplo 203.0.113.10:8080.
| O aplicativo pede | Digite |
|---|---|
| Host ou IP | 203.0.113.10 |
| Porta | 8080 |
| URL do proxy HTTP | http://203.0.113.10:8080 |
Não inclua a porta duas vezes. Se o aplicativo já tiver um campo de porta, colocar 203.0.113.10:8080 no campo do host pode fazê-lo tentar resolver a string inteira como nome de host. Da mesma forma, não acrescente um esquema a um campo que espera explicitamente apenas um endereço IP.
O esquema deve corresponder ao serviço. Escolha HTTP ou SOCKS5 conforme o suporte do cliente antes de converter o endereço. Escrever socks5:// antes de um endpoint HTTP muda o que o cliente envia; não habilita SOCKS5 nesse servidor.
IPv6 precisa de colchetes em uma URL
Um endereço IPv6 já contém dois-pontos, por isso a URL coloca o endereço entre colchetes antes de acrescentar a porta:
http://[2001:db8::10]:8080
socks5://[2001:db8::10]:1080
Sem os colchetes, o limite entre endereço e porta é ambíguo. Um aplicativo com campos separados geralmente espera 2001:db8::10 como host e 8080 como porta; siga o formato de entrada dele. Os dois endereços usados aqui são exemplos de documentação, não proxies ativos.
Analise URLs em vez de dividir a cada dois-pontos
Um pequeno script Python pode processar URLs IPv4 e IPv6 com colchetes usando o analisador de URLs padrão:
from urllib.parse import urlsplit
proxy = urlsplit("http://[2001:db8::10]:8080")
print(proxy.scheme)
print(proxy.hostname)
print(proxy.port)
A propriedade hostname retorna o endereço sem os colchetes. Dividir a string original a cada dois-pontos quebraria este exemplo. Em um importador real, rejeite também hosts ausentes, esquemas não suportados e portas fora de 1–65535. Analisar uma URL fornece seus componentes; não comprova que o serviço existe.
Quando a lista inclui usuário e senha
Um formato comum de URL é http://username:password@host:port. Caracteres como @, # e / nas credenciais precisam de codificação de URL adequada. Se o cliente oferece campos separados para as credenciais, usá-los costuma ser mais fácil do que montar uma URL à mão.
Confira o formato original do provedor antes de converter uma string de credenciais separadas por dois-pontos. Quatro campos separados assim não têm significado universal, e a própria senha pode conter dois-pontos. Um analisador feito para linhas simples de IP:port não deve adivinhar silenciosamente um formato diferente.