Obter uma página através de um proxy HTTP em jsoup
Usa a API de proxy HTTP ao nível do pedido do jsoup e cria pedidos separados quando vários trabalhadores partilham as definições de sessão.
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.