45 votes

Comment ajouter le support des proxy à Jsoup ?

Je suis un débutant en Java et ma première tâche consiste à analyser 10 000 URL et à en extraire des informations. Jsoup et ça marche bien.

Mais maintenant je veux y ajouter le support des proxy. Les proxys ont aussi un nom d'utilisateur et un mot de passe.

70voto

KaraPirinc Points 416

Vous pouvez facilement définir le proxy

System.setProperty("http.proxyHost", "192.168.5.1");
System.setProperty("http.proxyPort", "1080");
Document doc = Jsoup.connect("www.google.com").get();

53voto

Stephan Points 10596

Jsoup 1.9.1 et plus : (approche recommandée)

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

Vous pouvez également utiliser la surcharge Jsoup#proxy qui prend un Proxy (voir ci-dessous).

Avant Jsoup 1.9.1 : (approche verbeuse)

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

Références :

40voto

Ryan Points 326

Vous n'êtes pas obligé d'obtenir les données de la page Web via Jsoup. Voici ma solution, mais elle n'est peut-être pas la meilleure.

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

Et voilà. Il récupère la source de la page html à travers un proxy et l'analyse ensuite avec Jsoup.

5voto

Alex Shwarc Points 452
System.setProperty("http.proxyHost", "192.168.5.1");
System.setProperty("http.proxyPort", "1080");
Document doc = Jsoup.connect("www.google.com").get();

C'est une mauvaise solution, car l'analyse syntaxique est généralement multithreadée et nous devons généralement changer de proxies. Ce code ne définit qu'un seul proxy pour tous les threads. Il est donc préférable de ne pas utiliser Jsoup.Connection.

5voto

enig123 Points 175

Vous pourriez ajouter ceci avant de lancer le programme

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X