1. Обзор
В этом руководстве мы рассмотрим, как добавить поддержку прокси в Jsoup .
2. Распространенные причины использования прокси
Есть две основные причины, по которым мы можем захотеть использовать прокси с Jsoup.
2.1. Использование за прокси-сервером организации
Организации часто используют прокси-серверы, контролирующие доступ в Интернет. Если мы попытаемся получить доступ к Jsoup через проксированную локальную сеть, мы получим исключение :
java.net.SocketTimeoutException: connect timed out
Когда мы видим эту ошибку, нам нужно установить прокси для Jsoup, прежде чем пытаться получить доступ к любому URL-адресу за пределами сети .
2.2. Предотвращение блокировки IP
Еще одна распространенная причина использования прокси с Jsoup — предотвратить блокировку IP-адресов веб-сайтами.
Другими словами, использование прокси (или нескольких чередующихся прокси) позволяет нам более надежно анализировать HTML, уменьшая вероятность того, что наш код перестанет работать из-за блокировки или бана нашего IP-адреса .
3. Настройка
При использовании Maven нам нужно добавить зависимость Jsoup в наш pom.xml
:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
В Gradle мы должны объявить нашу зависимость в build.gradle
:
compile 'org.jsoup:jsoup:1.13.1'
4. Добавление поддержки прокси через свойства хоста и порта
Добавить поддержку прокси в Jsoup довольно просто. Все, что нам нужно сделать, это вызвать метод proxy (String, int)
при построении объекта Connection :
Jsoup.connect("https://spring.io/blog")
.proxy("127.0.0.1", 1080)
.get();
Здесь мы устанавливаем прокси-сервер HTTP, который будет использоваться для этого запроса, причем первый аргумент представляет имя хоста прокси-сервера, а второй — порт прокси-сервера.
5. Добавление поддержки прокси через прокси
- объект
Или, чтобы добавить прокси в Jsoup с помощью класса Proxy
, мы вызываем метод proxy (java.net.Proxy)
объекта Connection
:
Proxy proxy = new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("127.0.0.1", 1080));
Jsoup.connect("https://spring.io/blog")
.proxy(proxy)
.get();
Этот метод принимает объект Proxy
, состоящий из типа прокси, обычно типа HTTP, и InetSocketAddress
— класса, который содержит имя хоста и порт прокси соответственно.
6. Заключение
В этом руководстве мы рассмотрели два разных способа добавления поддержки прокси в Jsoup .
Во-первых, мы узнали, как это сделать с помощью метода Jsoup, который принимает свойства хоста и порта. Во-вторых, мы узнали, как добиться того же результата, используя объект Proxy
в качестве параметра.
Как всегда, образцы кода доступны на GitHub .