←前へ 目次↑ 次へ→

3.16. HTTPクライアント機能

Copper PDFには、ウェブサーバーから画像、スタイルシート、文書等を取得するためのHTTPクライアントが入っています。 公開されているウェブコンテンツにアクセスする場合は、特に設定は必要ありませんが、 プロクシを通してのアクセスや、認証(BASICまたはDigest)が必要なウェブサイトヘのアクセスもサポートしています。

以下の説明では、入出力プロパティの設定例をJavaで記述しています。 他の言語で実装する場合は、各プログラミング言語のプロパティ設定関数に書き換えてください。

3.16.1. BASIC認証またはDigest認証

BASIC認証が必要なウェブサーバーに接続する場合、

にそれぞれ対象のウェブサーバーのホスト名またはIPアドレス、ポート番号、ユーザー名、パスワードを設定します。 ポート番号を省略した場合は、ウェブサーバーのポート番号は任意となります。 パスワードを省略した場合は、空のパスワードが使われます。 ホスト名とユーザー名を省略することはできません。 nは0から始まる整数で、連番にすることで、複数のサイトやレルム(認証領域)に対応することができます。

サーバーに複数のレルムが存在する場合や、 Digest認証を行う場合は、実際の認証を行う前に、サーバーから認証情報を取得する必要があります。
input.http.authentication.preemptiveにtrueを設定することで、 サーバーから認証情報を取得できるようになります。 レルムを明示する場合は、input.http.n.authentication.realm にレルム名を設定します。

input.http.n.authentication.schema に BASIC認証(basic)か、Digest認証(digest)を設定することで、認証方法を限定することができます。
デフォルトの設定で、input.http.authentication.preemptiveがtrue の場合は、認証方法が自動判別されます。

以下の例ではwww.foo.comとwww.bar.comにそれぞれ別のユーザーアカウントで接続し、 BASIC認証かDigest認証かを自動判別します。

session.property("input.http.authentication.preemptive", "true");
session.property("input.http.0.authentication.host", "www.foo.com");
session.property("input.http.0.authentication.user", "foouser");
session.property("input.http.0.authentication.password", "foopass");
session.property("input.http.1.authentication.host", "www.bar.com");
session.property("input.http.1.authentication.user", "baruser");
session.property("input.http.1.authentication.password", "barpass");

3.16.2. プロクシの設定

ウェブブラウザ等と同様に、HTTP接続のためのプロクシを設定することができます。

input.http.proxy.hostに、 プロクシ・サーバーのホスト名またはIPアドレスを設定することにより、プロクシを通して接続するようになります。 プロクシ・サーバーのデフォルトのポート番号は8080ですが、 input.http.proxy.portにより、 任意のポート番号を設定することができます。

認証が必要なプロクシ・サーバーを使用する場合、

にそれぞれユーザー名とパスワードを設定してください。

次の例では、認証が必要なプロクシ・サーバー proxy.foo.comに、 "mei", "pass"というユーザ名とパスワードで接続します。

session.property("input.http.proxy.host", "proxy.foo.com");
session.property("input.http.proxy.authentication.user", "mei");
session.property("input.http.proxy.authentication.password", "pass");

3.16.3. HTTPヘッダの送信

2つで1組の入出力プロパティ、

でHTTPのヘッダを設定することができます。 nは0から始まる整数で、連番にすることで、複数のHTTPヘッダを送ることができます。

次の例では、クライアントの使用言語を韓国語、 ブラウザの種類をInternet Explorer7であるとウェブサーバーに申告するようにHTTPヘッダを設定しています。

session.property("input.http.header.0.name", "Accept-Language");
session.property("input.http.header.0.value", "ko");
session.property("input.http.header.1.name", "User-Agent");
session.property("input.http.header.1.value", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");

3.16.4. 参照元(Referer)の送信

デフォルトでは、変換対象の文書のURIがRefererヘッダの値として送信されます。 この機能は、input.http.refererをfalseに設定することにより無効化することができます。

Copper PDFのHTTPクライアントには、ウェブサーバーからクッキーを取得し、保存する機能はありません。

ただし、アプリケーション側で設定したクッキーをウェブサーバーに送信する機能があります。 これは、クッキーを使ったセッション認証を行うウェブアプリケーションでCopper PDFを使用する場合に、 ウェブアプリケーションがユーザーのセッションIDを知っていて、 Copper PDFから自分自身のウェブサーバーに接続する場合には有効です。

クッキーは4つで1組となっている、

という入出力プロパティで設定します。 それぞれクッキーのドメイン、名前、値、パスです。パスを省略した場合はルートパス("/")となります。 nは0から始まる整数で、連番にすることで、複数のクッキーを送ることができます。

次は、Javaサーブレットで現在のクライアントのセッションIDをCopper PDFのHTTPクライアントに引き継ぐ例です。

String sessionId = request.getSession().getId();
session.property("input.http.cookie.0.domain", "www.foo.com");
session.property("input.http.cookie.0.name", "JSESSIONID");
session.property("input.http.cookie.0.value", sessionId);
session.property("input.http.cookie.0.path", "/");

3.16.6. タイムアウトの設定

相手先サーバとの接続に時間がかかる場合、あるいは接続後一定時間データがやりとりされない場合、 接続を切断してコンテンツの取得をあきらめる(タイムアウトする)ように設定することができます。 2.0.7 デフォルトではタイムアウトしないため、ずっと待ち続けます。

タイムアウトは

により設定します。数値で設定し、単位はms(ミリ秒)です。

次の例では、接続が確立するまで30秒以上かかった場合または接続語10秒間データがやりとりされなかった場合にタイムアウトするように設定しています。

session.property("input.http.connection.timeout", "30000");
session.property("input.http.socket.timeout", "10000");

←前へ 目次↑ 次へ→
Copper PDF ©2012 Zamasoft. All rights reserved.