1. 概要

このチュートリアルでは、Jsoupにプロキシサポートを追加する方法を見ていきます。

2. プロキシを使用する一般的な理由

Jsoupでプロキシを使用する主な理由は2つあります。

2.1. 組織プロキシの背後での使用

組織がインターネットアクセスを制御するプロキシを持っていることは一般的です。  プロキシされたローカルネットワークを介してJsoupにアクセスしようとすると、例外が発生します。

java.net.SocketTimeoutException: connect timed out

このエラーが表示された場合は、ネットワークの外部のURLにアクセスする前に、Jsoupのプロキシを設定する必要があります。

2.2. IPブロッキングの防止

Jsoupでプロキシを使用するもう1つの一般的な理由は、Webサイトが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にプロキシサポートを追加するのは非常に簡単です。 必要なのは、 Connection オブジェクトを構築するときにproxy(String、int)メソッドを呼び出すことだけです。

Jsoup.connect("https://spring.io/blog")
  .proxy("127.0.0.1", 1080)
  .get();

ここでは、このリクエストに使用するHTTPプロキシを設定します。最初の引数はプロキシのホスト名を表し、2番目の引数はプロキシポートを表します。

5. Proxyオブジェクトを介したプロキシサポートの追加

または、 Proxy クラスを使用してプロキシをJsoupに追加するには、Connectionオブジェクトのproxy(java.net.Proxy)メソッドを呼び出します。

Proxy proxy = new Proxy(Proxy.Type.HTTP, 
  new InetSocketAddress("127.0.0.1", 1080));

Jsoup.connect("https://spring.io/blog")
  .proxy(proxy)
  .get();

このメソッドは、プロキシタイプ(通常はHTTPタイプ)と InetSocketAddress (プロキシのホスト名とポートをそれぞれラップするクラス)で構成されるProxyオブジェクトを取ります。

6. 結論

このチュートリアルでは、Jsoupにプロキシサポートを追加する2つの異なる方法について説明しました。

最初に、ホストとポートのプロパティを取得するJsoupメソッドを使用してそれを行う方法を学びました。 次に、Proxyオブジェクトをパラメーターとして使用して同じ結果を達成する方法を学びました。

いつものように、コードサンプルはGitHub利用可能です。