Copper PDFには、ウェブサーバーから画像、スタイルシート、文書等を取得するためのHTTPクライアントが入っています。 公開されているウェブコンテンツにアクセスする場合は、特に設定は必要ありませんが、 プロクシを通してのアクセスや、認証(BASICまたはDigest)が必要なウェブサイトヘのアクセスもサポートしています。
以下の説明では、入出力プロパティの設定例をJavaで記述しています。 他の言語で実装する場合は、各プログラミング言語のプロパティ設定関数に書き換えてください。
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.setProperty("input.http.authentication.preemptive", "true"); session.setProperty("input.http.0.authentication.host", "www.foo.com"); session.setProperty("input.http.0.authentication.user", "foouser"); session.setProperty("input.http.0.authentication.password", "foopass"); session.setProperty("input.http.1.authentication.host", "www.bar.com"); session.setProperty("input.http.1.authentication.user", "baruser"); session.setProperty("input.http.1.authentication.password", "barpass");
ウェブブラウザ等と同様に、HTTP接続のためのプロクシを設定することが出来ます。
input.http.proxy.hostに、 プロクシ・サーバーのホスト名またはIPアドレスを設定することにより、プロクシを通して接続するようになります。 プロクシ・サーバーのデフォルトのポート番号は8080ですが、 input.http.proxy.portにより、 任意のポート番号を設定することが出来ます。
認証が必要なプロクシ・サーバーを使用する場合、
にそれぞれユーザー名とパスワードを設定してください。
次の例では、認証が必要なプロクシ・サーバー proxy.foo.comに、 "mei", "pass"というユーザ名とパスワードで接続します。
session.setProperty("input.http.proxy.host", "proxy.foo.com"); session.setProperty("input.http.proxy.authentication.user", "mei"); session.setProperty("input.http.proxy.authentication.password", "pass");
2つで1組の入出力プロパティ、
でHTTPのヘッダを設定することが出来ます。 nは0から始まる整数で、連番にすることで、複数のHTTPヘッダを送ることが出来ます。
次の例では、クライアントの使用言語を韓国語、 ブラウザの種類をInternet Explorer7であるとウェブサーバーに申告するようにHTTPヘッダを設定しています。
session.setProperty("input.http.header.0.name", "Accept-Language"); session.setProperty("input.http.header.0.value", "ko"); session.setProperty("input.http.header.1.name", "User-Agent"); session.setProperty("input.http.header.1.value", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
デフォルトでは、変換対象の文書の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.setProperty("input.http.cookie.0.domain", "www.foo.com"); session.setProperty("input.http.cookie.0.name", "JSESSIONID"); session.setProperty("input.http.cookie.0.value", sessionId); session.setProperty("input.http.cookie.0.path", "/");
相手先サーバとの接続に時間がかかる場合、あるいは接続後一定時間データがやりとりされない場合、 接続を切断してコンテンツの取得をあきらめる(タイムアウトする)ように設定することが出来ます。 2.0.7 デフォルトではタイムアウトしないため、ずっと待ち続けます。
タイムアウトは
により設定します。数値で設定し、単位はms(ミリ秒)です。
次の例では、接続が確立するまで30秒以上かかった場合または接続語10秒間データがやりとりされなかった場合にタイムアウトするように設定しています。
session.setProperty("input.http.connection.timeout", "30000"); session.setProperty("input.http.socket.timeout", "10000");