Uma solicitação OkHttp não tem um campo de proxy mutável geral. Escolha o cliente com a rota pretendida antes de criar a chamada.

Quando o restante da configuração deve permanecer compartilhado, derive o cliente roteado de um cliente existente:

OkHttpClient routed = baseClient.newBuilder()
    .proxy(new Proxy(Proxy.Type.HTTP,
        new InetSocketAddress("203.0.113.10", 8080)))
    .build();

O endpoint é apenas ilustrativo. Endpoints HTTP públicos da lista de proxies HTTP podem preencher este endereço de socket para uma rota de serviço público permitida, desde que a política do cliente base não forneça credenciais de proxy ao novo endpoint. O OkHttp documenta que o newBuilder compartilha recursos de pool de conexões e de threads com o cliente original. Isso não significa que um socket estabelecido por meio de um proxy possa ser reetiquetado como outra rota. A elegibilidade da conexão ainda depende da configuração de rota e endereço.

Para trabalho repetido, mantenha um conjunto limitado de clientes indexados pela política de roteamento de que você realmente precisa. Evite um mapa ilimitado cujas chaves contenham todas as contas temporárias ou variações de proxy já observadas.

O compartilhamento de recursos também afeta o encerramento. Fechar um cache compartilhado ou desligar um despachante compartilhado pode afetar outros clientes derivados que usam esses recursos. Dê à propriedade dos recursos um tempo de vida claro no nível da aplicação em vez de tratar cada cliente derivado como uma pilha de rede isolada.

Por fim, inclua a identidade do proxy selecionado nos próprios metadados da chamada. Uma variável global de “último proxy escolhido” não consegue identificar a rota de várias solicitações simultâneas.

Artigos relacionados