jsoup può recuperare la pagina tramite un proxy HTTP e analizzare la risposta nella stessa chiamata:

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

Il nome host e la porta intera identificano il proxy. Per le richieste consentite a pagine pubbliche, seleziona un endpoint HTTP dal tuo servizio o dalla lista di proxy HTTP. L’URL passato a connect resta la pagina che desideri. Non devi scaricare l’HTML in una stringa con un URLConnection separato solo per aggiungere questa rotta.

proxy(String, int) seleziona un proxy HTTP per quella richiesta. Un numero di porta come 1080 non cambia il suo protocollo in SOCKS; l’endpoint del proxy deve parlare il tipo che viene configurato. jsoup espone anche un overload che accetta java.net.Proxy, ma il supporto per una rotta specifica dipende ancora dall’implementazione HTTP in uso.

Dai a ogni worker la propria richiesta

Un’opzione a livello di richiesta rende il lavoro parallelo più semplice che modificare le proprietà di sistema della JVM intorno a ogni download. Mantieni la richiesta mutabile separata per ogni worker. Il jsoup moderno può condividere le impostazioni e l’archivio dei cookie di una sessione mentre crea una richiesta nuova:

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

Le chiamate sopra vengono eseguite in sequenza per chiarezza. Se il lavoro viene distribuito in modo concorrente, crea le richieste indipendentemente invece di cambiare il proxy su una Connection in corso. Una sessione condivisa condivide anche i cookie; usa sessioni diverse quando le identità di navigazione devono restare separate.

Queste interfacce sono presenti in jsoup 1.21.2. L’interfaccia newRequest() senza argomenti risale alla 1.14.1, quindi un’applicazione più vecchia dovrebbe controllare la propria dipendenza prima di adottare l’esempio di sessione.

Le credenziali sono un requisito ulteriore per un proxy autenticato. Una selezione di rotta riuscita non fornisce un account, e ricevere una richiesta di autenticazione del proxy è diverso dal non riuscire a connettersi alla sua porta.

Articoli correlati