Как добавить поддержку прокси в Jsoup? - PullRequest
37 голосов
/ 20 сентября 2011

Я новичок в Java, и моя первая задача - проанализировать около 10000 URL-адресов и извлечь из них некоторую информацию, для этого я использую Jsoup , и он работает нормально.

Но теперь я хочу добавить поддержку прокси. Прокси имеют также имя пользователя и пароль.

Ответы [ 7 ]

69 голосов
/ 09 августа 2012

Вы можете легко установить прокси

System.setProperty("http.proxyHost", "192.168.5.1");
System.setProperty("http.proxyPort", "1080");
Document doc = Jsoup.connect("www.google.com").get();
35 голосов
/ 22 января 2016

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

Ссылки:

33 голосов
/ 09 декабря 2011

Вам не нужно получать данные веб-страницы через 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.

4 голосов
/ 15 февраля 2015

Вы можете добавить это перед запуском программы

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");
..
4 голосов
/ 07 января 2015
System.setProperty("http.proxyHost", "192.168.5.1");
System.setProperty("http.proxyPort", "1080");
Document doc = Jsoup.connect("www.google.com").get();

Это неправильное решение, потому что синтаксический анализ обычно является многопоточным, и нам обычно нужно менять прокси.Этот код устанавливает только один прокси для всех потоков.Так что лучше не использовать Jsoup.Connection.

2 голосов
/ 01 сентября 2017

Jsoup поддерживает использование прокси , поскольку v1.9.1 . Connection класс имеет следующие методы:

  • 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");
1 голос
/ 07 февраля 2017

Попробуйте этот код вместо:

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