Je suis un débutant pour Java et ma première tâche est d'analyser quelque 10 000 URL et d'en extraire des informations, pour cela j'utilise Jsoup et ça marche bien .
Mais maintenant, je veux y ajouter un support proxy. Les mandataires ont également un nom d'utilisateur et un mot de passe.
Vous n'avez pas besoin d'obtenir les données de la page Web via Jsoup. Voici ma solution, mais ce 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à. Cela obtient la source de la page html via un proxy, puis l'analyse avec Jsoup.
Vous pouvez facilement définir un proxy
System.setProperty("http.proxyHost", "192.168.5.1");
System.setProperty("http.proxyPort", "1080");
Document doc = Jsoup.connect("www.google.com").get();
Jsoup 1.9.1 et supérieur: (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 une classe Proxy .
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();
Les références:
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 est généralement multithread et nous devons généralement changer de proxy. Ce code définit un seul proxy pour tous les threads. Il vaut donc mieux ne pas utiliser Jsoup.Connection.
Vous voudrez peut-être ajouter ceci avant d'exécuter 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");
..
Jsoup prend en charge l'utilisation de proxy , puisque v1.9.1 . Connection
class a les méthodes suivantes:
proxy(Proxy p)
proxy(String Host, int port)
Que vous pouvez l'utiliser comme ceci:
Jsoup.connect("...url...").proxy("127.0.0.1", 8080);
Si vous avez besoin d'une authentification, vous pouvez utiliser l'approche Authenticator
mentionnée par @ Navneet Swaminathan ou simplement définir propriétés système :
System.setProperty("http.proxyUser", "username");
System.setProperty("http.proxyPassword", "password");
ou
System.setProperty("https.proxyUser", "username");
System.setProperty("https.proxyPassword", "password");
Essayez plutôt ce code:
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());