jsoup peut récupérer la page via un proxy HTTP et analyser la réponse dans le même appel :

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

Le nom d’hôte et le port entier identifient le proxy. Pour les requêtes autorisées vers des pages publiques, choisissez un point de terminaison HTTP dans votre service ou dans la liste de proxys HTTP. L’URL transmise à connect reste la page que vous voulez. Il n’est pas nécessaire de télécharger le HTML dans une chaîne avec un URLConnection séparé uniquement pour ajouter cette route.

proxy(String, int) sélectionne un proxy HTTP pour cette requête. Un numéro de port comme 1080 ne transforme pas son protocole en SOCKS ; le point de terminaison du proxy doit parler le type configuré. jsoup expose aussi une surcharge acceptant java.net.Proxy, mais la prise en charge d’une route donnée dépend toujours de l’implémentation HTTP utilisée.

Donnez à chaque worker sa propre requête

Une option au niveau de la requête facilite le travail parallèle plus que la modification des propriétés système de la JVM autour de chaque téléchargement. Gardez la requête mutable séparée pour chaque worker. Le jsoup moderne peut partager les réglages et le magasin de cookies d’une session tout en créant une requête neuve :

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();

Les appels ci-dessus s’exécutent séquentiellement par souci de clarté. Si le travail est distribué simultanément, créez les requêtes indépendamment plutôt que de changer le proxy sur une Connection en cours. Une session partagée partage aussi les cookies ; utilisez des sessions différentes lorsque les identités de navigation doivent rester séparées.

Ces interfaces sont présentes dans jsoup 1.21.2. L’interface newRequest() sans argument date de 1.14.1, donc une application plus ancienne devrait vérifier sa dépendance avant d’adopter l’exemple de session.

Les identifiants sont une exigence supplémentaire pour un proxy authentifié. Une sélection de route réussie ne fournit pas de compte, et recevoir un défi du proxy diffère d’un échec de connexion à son port.

Articles similaires