Een pagina ophalen via een HTTP-proxy in jsoup
Gebruik de HTTP-proxy-API van jsoup op verzoekniveau en maak afzonderlijke verzoeken wanneer meerdere workers sessie-instellingen delen.
jsoup kan de pagina via een HTTP-proxy ophalen en de respons in dezelfde aanroep verwerken:
Document page = Jsoup.connect("https://www.example.com/")
.proxy("proxy.example", 8080)
.get();
De hostnaam en de gehele poort identificeren de proxy. Kies voor toegestane verzoeken naar openbare pagina’s een HTTP-eindpunt uit je dienst of uit de HTTP-proxylijst. De URL die aan connect wordt gegeven blijft de pagina die je wilt. Je hoeft de HTML niet naar een string te downloaden met een aparte URLConnection alleen om deze route toe te voegen.
proxy(String, int) selecteert een HTTP-proxy voor dat verzoek. Een poortnummer zoals 1080 verandert het protocol niet in SOCKS; het eindpunt van de proxy moet het type spreken dat wordt geconfigureerd. jsoup biedt ook een overload die java.net.Proxy accepteert, maar ondersteuning voor een bepaalde route hangt nog steeds af van de gebruikte HTTP-implementatie.
Geef elke worker zijn eigen verzoek
Een optie op verzoekniveau maakt parallel werk eenvoudiger dan het wijzigen van JVM-systeemeigenschappen rond elke download. Houd het veranderlijke verzoek apart voor elke worker. Modern jsoup kan de instellingen en de cookieopslag van een sessie delen terwijl het een nieuw verzoek maakt:
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();
De aanroepen hierboven lopen voor de duidelijkheid na elkaar. Als werk gelijktijdig wordt verdeeld, maak de verzoeken dan onafhankelijk aan in plaats van de proxy te wijzigen op één Connection die nog loopt. Een gedeelde sessie deelt ook cookies; gebruik verschillende sessies wanneer de browse-identiteiten gescheiden moeten blijven.
Deze interfaces zijn aanwezig in jsoup 1.21.2. De interface newRequest() zonder argumenten dateert uit 1.14.1, dus een oudere applicatie moet zijn afhankelijkheid controleren voordat hij het sessievoorbeeld overneemt.
Inloggegevens zijn een extra vereiste voor een geauthenticeerde proxy. Een geslaagde routekeuze levert geen account, en een proxy-uitdaging ontvangen is iets anders dan geen verbinding kunnen maken met de poort ervan.