Как добавить поддержку прокси в Jsoup?
Я новичок в Java, и моя первая задача - проанализировать около 10000 URL-адресов и извлечь из них некоторую информацию, для этого я использую Jsoup, и он работает нормально.
Но теперь я хочу добавить поддержку прокси. Прокси имеют имя пользователя и пароль тоже.
Ответы
Ответ 1
Вам не нужно получать данные веб-страницы через Jsoup. Здесь мое решение, возможно, это не самое лучшее.
URL url = new URL("http://www.example.com/");
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8080)); // or whatever your proxy is
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
uc.connect();
String line = null;
StringBuffer tmp = new StringBuffer();
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
while ((line = in.readLine()) != null) {
tmp.append(line);
}
Document doc = Jsoup.parse(String.valueOf(tmp));
И вот оно. Это получает источник html-страницы через прокси-сервер и затем анализирует его с помощью Jsoup.
Ответ 2
Вы можете легко установить прокси
System.setProperty("http.proxyHost", "192.168.5.1");
System.setProperty("http.proxyPort", "1080");
Document doc = Jsoup.connect("www.google.com").get();
Ответ 3
Jsoup 1.9.1 и выше: (рекомендуемый подход)
// Fetch url with proxy
Document doc = Jsoup //
.connect("http://www.example.com/") //
.proxy("127.0.0.1", 8080) // sets a HTTP proxy
.userAgent("Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2") //
.header("Content-Language", "en-US") //
.get();
Вы также можете использовать перегрузку Jsoup # proxy, которая принимает класс Proxy (см. ниже).
До Jsoup 1.9.1: (подробный подход)
// Setup proxy
Proxy proxy = new Proxy( //
Proxy.Type.HTTP, //
InetSocketAddress.createUnresolved("127.0.0.1", 8080) //
);
// Fetch url with proxy
Document doc = Jsoup //
.connect("http://www.example.com/") //
.proxy(proxy) //
.userAgent("Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2") //
.header("Content-Language", "en-US") //
.get();
Ссылки:
Ответ 4
и если вы после HTTPS, как я, не забудьте попробовать
System.setProperty("https.proxyHost", "192.168.5.1");
System.setProperty("https.proxyPort", "1080");
Document doc = Jsoup.connect("www.google.com").get();
Ответ 5
System.setProperty("http.proxyHost", "192.168.5.1");
System.setProperty("http.proxyPort", "1080");
Document doc = Jsoup.connect("www.google.com").get();
Это неправильное решение, потому что синтаксический анализ обычно многопоточен, и мы обычно должны менять прокси. Этот код устанавливает только один прокси для всех потоков. Поэтому лучше не использовать Jsoup.Connection.
Ответ 6
Возможно, вы захотите добавить это перед запуском программы
final String authUser = "USERNAME";
final String authPassword = "PASSWORD";
Authenticator.setDefault(
new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
authUser, authPassword.toCharArray());
}
}
);
..
System.setProperty("http.proxyHost", "192.168.5.1");
System.setProperty("http.proxyPort", "1080");
..
Ответ 7
Jsoup поддерживает использование прокси-серверов, так как v1.9.1. Connection
class имеет следующие методы:
-
proxy(Proxy p)
-
proxy(String host, int port)
Что вы можете использовать так:
Jsoup.connect("...url...").proxy("127.0.0.1", 8080);
Если вам нужна аутентификация, вы можете использовать подход Authenticator
, упомянутый @Navneet Swaminathan, или просто установите Свойства системы:
System.setProperty("http.proxyUser", "username");
System.setProperty("http.proxyPassword", "password");
или
System.setProperty("https.proxyUser", "username");
System.setProperty("https.proxyPassword", "password");
Ответ 8
Попробуйте использовать этот код:
URL url = new URL("http://www.example.com/");
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8080)); // or whatever your proxy is
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
hc.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
uc.setRequestProperty("Content-Language", "en-US");
uc.setRequestMethod("GET");
uc.connect();
Document doc = Jsoup.parse(uc.getInputStream());