Obtener una página a través de un proxy HTTP en jsoup
Usa la API de proxy HTTP a nivel de solicitud de jsoup y crea solicitudes separadas cuando varios trabajadores comparten la configuración de sesión.
jsoup puede obtener la página a través de un proxy HTTP y analizar la respuesta en la misma llamada:
Document page = Jsoup.connect("https://www.example.com/")
.proxy("proxy.example", 8080)
.get();
El nombre de host y el puerto entero identifican el proxy. Para las solicitudes permitidas a páginas públicas, selecciona un extremo HTTP de tu servicio o de la lista de proxies HTTP. La URL que se pasa a connect sigue siendo la página que quieres. No necesitas descargar el HTML a una cadena con un URLConnection aparte solo para añadir esta ruta.
proxy(String, int) selecciona un proxy HTTP para esa solicitud. Un número de puerto como 1080 no cambia su protocolo a SOCKS; el extremo del proxy debe hablar el tipo que se está configurando. jsoup también expone una sobrecarga que acepta java.net.Proxy, pero la compatibilidad con una ruta concreta sigue dependiendo de la implementación HTTP en uso.
Da a cada trabajador su propia solicitud
Una opción a nivel de solicitud facilita el trabajo en paralelo más que cambiar las propiedades del sistema JVM alrededor de cada descarga. Mantén la solicitud mutable separada para cada trabajador. El jsoup moderno puede compartir la configuración y el almacén de cookies de una sesión mientras crea una solicitud nueva:
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();
Las llamadas anteriores se ejecutan secuencialmente por claridad. Si el trabajo se distribuye de forma concurrente, crea las solicitudes de forma independiente en lugar de cambiar el proxy en una Connection en curso. Una sesión compartida también comparte cookies; usa sesiones diferentes cuando las identidades de navegación deban permanecer separadas.
Estas interfaces están presentes en jsoup 1.21.2. La interfaz newRequest() sin argumentos data de 1.14.1, así que una aplicación antigua debería comprobar su dependencia antes de adoptar el ejemplo de sesión.
Las credenciales son un requisito adicional para un proxy autenticado. Una selección de ruta correcta no proporciona una cuenta, y recibir un desafío del proxy es distinto de no poder conectar con su puerto.