O jsoup pode obter a página através de um proxy HTTP e analisar a resposta na mesma chamada:

Document page = Jsoup.connect("https://www.example.com/")
    .proxy("proxy.example", 8080)
    .get();

O nome do host e a porta inteira identificam o proxy. Para pedidos permitidos a páginas públicas, seleciona um endpoint HTTP do teu serviço ou da lista de proxies HTTP. O URL passado a connect continua a ser a página que queres. Não precisas de descarregar o HTML para uma string com um URLConnection separado só para adicionar esta rota.

proxy(String, int) seleciona um proxy HTTP para esse pedido. Um número de porta como 1080 não altera o protocolo para SOCKS; o endpoint do proxy tem de falar o tipo que está a ser configurado. O jsoup também expõe uma sobrecarga que aceita java.net.Proxy, mas o suporte para uma rota específica continua a depender da implementação HTTP em uso.

Dá a cada trabalhador o seu próprio pedido

Uma opção ao nível do pedido facilita o trabalho paralelo mais do que alterar propriedades de sistema da JVM em torno de cada descarga. Mantém o pedido mutável separado para cada trabalhador. O jsoup moderno pode partilhar as definições e o armazenamento de cookies de uma sessão ao criar um novo pedido:

Connection session = Jsoup.newSession();
Document first = session.newRequest()
    .url("https://www.example.com/one")
    .proxy("proxy-a.example", 8080)
    .get();
Document second = session.newRequest()
    .url("https://www.example.com/two")
    .proxy("proxy-b.example", 8080)
    .get();

As chamadas acima executam sequencialmente por clareza. Se o trabalho for distribuído em simultâneo, cria os pedidos de forma independente em vez de alterar o proxy numa Connection em curso. Uma sessão partilhada também partilha cookies; usa sessões diferentes quando as identidades de navegação devem permanecer separadas.

Estas interfaces estão presentes no jsoup 1.21.2. A interface newRequest() sem argumentos data de 1.14.1, por isso uma aplicação mais antiga deve verificar a sua dependência antes de adotar o exemplo de sessão.

As credenciais são um requisito adicional para um proxy autenticado. Uma seleção de rota bem-sucedida não fornece uma conta, e receber um desafio do proxy é diferente de falhar a ligação à sua porta.

Artigos relacionados