ヘッダーをスキップ
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス
11g リリース1(11.1)
E05686-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

207 UTL_HTTP

UTL_HTTPパッケージは、SQLとPL/SQLからHypertext Transfer Protocol(HTTP)のコールアウトを行います。これを使用すると、HTTPを経由してインターネット上のデータにアクセスできます。

パッケージでHTTPSを使用してWebサイトからデータをフェッチする場合は、Oracle Wallet Managerを使用してOracle Walletを設定する必要があります。HTTPS以外を使用したフェッチの場合は、Oracle Walletは必要ありません。


関連項目:


この章では、次の項目について説明します。


UTL_HTTPの使用方法

この項では、UTL_HTTPパッケージの使用に関連する項目について説明します。


概要

UTL_HTTPパッケージを使用すると、Web(HTTP)サーバーと通信するPL/SQLプログラムを記述できます。 UTL_HTTPには、SQL問合せで使用できるファンクションが含まれています。

また、このパッケージは、HTTPSと呼ばれるSecure Sockets Layer(SSL)プロトコルを使用して、直接またはHTTPプロキシ経由でHTTPをサポートします。

インターネット関連の他のデータアクセス・プロトコル(ファイル転送プロトコル(FTP)またはGopherプロトコル)は、これらのプロトコルをサポートするHTTPプロキシ・サーバーを使用してサポートされます。


セキュリティ・モデル

このパッケージは実行者権限のパッケージになったため、起動するユーザーには、接続するリモート・ネットワーク・ホストに割り当てられたアクセス制御リストによって接続権限が付与されている必要があります。


注意:

詳細は、『Oracle Databaseセキュリティ・ガイド』の外部ネットワーク・サービスへのファイングレイン・アクセスの管理に関する項を参照してください。


定数

UTL_HTTPパッケージでは、次の表に示す定数が使用されます。

表207-1 UTL_HTTP定数: HTTPバージョン

名前 説明

HTTP_VERSION_1_0

VARCHAR2(10)

'HTTP/1.0'

BEGIN_REQUESTファンクションで使用できるHTTPバージョン1.0を示します。

HTTP_VERSION_1

VARCHAR2(10)

'HTTP/1.1'

BEGIN_REQUESTファンクションで使用できるHTTPバージョン1.1を示します。


表207-2 UTL_HTTP定数: デフォルト・ポート

名前 説明

DEFAULT_HTTP_PORT

PLS_INTEGER

80

Webサーバーまたはプロキシ・サーバーがリスニングするデフォルトのTCP/IPポート(80)。

DEFAULT_HTTPS_PORT

PLS_INTEGER

443

HTTPS WebサーバーがリスニングするデフォルトのTCP/IPポート(443)。


表207-3 UTL_HTTP定数: HTTP 1.1のステータス・コード

名前 説明

HTTP_CONTINUE

PLS_INTEGER

100

クライアントは要求を継続する必要があります。この仮の応答を使用して、サーバーで要求の最初の部分が受信され、まだ拒否されていないことをクライアントに通知します。

HTTP_SWITCHING_PROTOCOLS

PLS_INTEGER

101

サーバーは、Upgradeメッセージ・ヘッダー・フィールドを介して、クライアントによる、この接続で使用されているアプリケーション・プロトコルの変更要求を解釈し、それらに応じます。サーバーは、101応答を終了する空の行の直後にある応答のUpgradeヘッダー・フィールドで定義されているプロトコルにプロトコルを切り替えます。

HTTP_OK

PLS_INTEGER

200

応答は成功しました。応答とともに戻される情報は、要求で使用されたメソッドによって異なります。

HTTP_CREATED CONSTANT

PLS_INTEGER

201

要求が満たされ、新規リソースが作成されます。

HTTP_ACCEPTED

PLS_INTEGER

202

要求の処理は受け入れられましたが、処理は完了していません。要求は、実際に処理が行われる際に拒否される可能性があるため、最終的には処理されない場合もあります。

HTTP_NON_AUTHORITATIVE_INFO

PLS_INTEGER

203

エンティティヘッダーに戻されるメタ情報は、オリジナル・サーバーから収集可能な最終的なセットではなく、ローカルまたはサードパーティ・コピーから収集されます。

HTTP_NO_CONTENT

PLS_INTEGER

204

サーバーは、要求を満たしましたが、エンティティ本体を戻す必要はありません。また、更新されたメタ情報を戻す場合もあります。

HTTP_RESET_CONTENT

PLS_INTEGER

205

サーバーは、要求を満たしました。ユーザー・エージェントは、要求の送信元ドキュメント・ビューを再設定する必要があります。応答にはエンティティを含めないでください。

HTTP_PARTIAL_CONTENT

PLS_INTEGER

206

サーバーは、リソースに対するGET要求の一部を満たしました。

HTTP_MULTIPLE_CHOICES

PLS_INTEGER

300

要求されたリソースが一連の表現のいずれかに対応しています。各表現には固有の場所があり、ユーザー(またはユーザー・エージェント)が適切な表現を選択し、要求をその表現の場所にリダイレクトできるようにエージェントドリブンのネゴシエーション情報が提供されます。

HTTP_MOVED_PERMANENTLY

PLS_INTEGER

301

要求されたリソースが新規永続URIに割り当てられています。このリソースを今後参照するには、戻されたURIのいずれかを使用する必要があります。

HTTP_FOUND CONSTANT

PLS_INTEGER

302

要求されたリソースが一時的に別のURIに存在しています。

HTTP_SEE_OTHER

PLS_INTEGER

303

要求への応答が別のURIに存在している可能性があります。この応答は、リソースに対してGETメソッドを使用して取得する必要があります。

HTTP_NOT_MODIFIED

PLS_INTEGER

304

クライアントが条件付きGET要求を実行し、アクセスは許可されているが、ドキュメントは変更されていない場合、サーバーはこのステータス・コードで応答します。

HTTP_USE_PROXY

PLS_INTEGER

305

要求されたリソースには、「位置」フィールドで指定されているプロキシを使用してアクセスする必要があります。「位置」フィールドには、プロキシのURIが指定されています。

HTTP_TEMPORARY_REDIRECT

PLS_INTEGER

307

要求されたリソースが一時的に別のURIに存在しています。

HTTP_BAD_REQUEST

PLS_INTEGER

400

不適切な構文のため、要求がサーバーで解釈されませんでした。

HTTP_UNAUTHORIZED

PLS_INTEGER

401

要求には、ユーザー認証が必要です。クライアントは、適切なAuthorizationヘッダー・フィールドを使用して要求を繰り返します。要求に認証資格証明が含まれている場合、401応答は資格証明の認証が拒否されたことを示します。

HTTP_PAYMENT_REQUIRED

PLS_INTEGER

402

このコードは将来使用するために予約されています。

HTTP_FORBIDDEN

PLS_INTEGER

403

サーバーは、要求を解釈しましたが、要求を満たすことを拒否しています。

HTTP_NOT_FOUND

PLS_INTEGER

404

サーバーで、要求URIと一致するURIは検出されませんでした。

HTTP_NOT_ACCEPTABLE

PLS_INTEGER

406

要求で識別されるリソースは、応答エンティティの生成のみを行うことができます。応答エンティティには、要求で送信される受入れヘッダーに応じて、受け入れられないコンテンツ特性があります。

HTTP_PROXY_AUTH_REQUIRED

PLS_INTEGER

407

このコードは401(未許可)と類似していますが、クライアントがプロキシを使用して最初にクライアント自身を認証する必要があることを示します。

HTTP_REQUEST_TIME_OUT

PLS_INTEGER

408

クライアントは、サーバーの待機時間内に要求を作成しませんでした。

HTTP_CONFLICT

PLS_INTEGER

409

リソースの現在の状態との競合のため、要求は完了されませんでした。

HTTP_GONE

PLS_INTEGER

410

要求されたリソースはサーバーで使用できなくなりました。転送アドレスが不明です。

HTTP_LENGTH_REQUIRED

PLS_INTEGER

411

サーバーは、Content-Lengthが定義されていない要求の受入れを拒否します。

HTTP_PRECONDITION_FAILED

PLS_INTEGER

412

1つ以上の要求ヘッダー・フィールドに指定されている事前条件が、サーバーでのテストでfalseと評価されました。

HTTP_REQUEST_ENTITY_TOO_LARGE CONSTANT

PLS_INTEGER

413

サーバーは、要求エンティティがサーバーで処理可能な大きさよりも大きいため、要求の処理を拒否しています。

HTTP_REQUEST_URI_TOO_LARGE

PLS_INTEGER

414

サーバーは、要求URIがサーバーで解釈可能な長さよりも長いため、要求の処理を拒否しています。

HTTP_UNSUPPORTED_MEDIA_TYPE

PLS_INTEGER

415

要求のエンティティの形式が、要求されているメソッド用に要求されているリソースでサポートされている形式ではないため、サーバーは要求の処理を拒否しています。

HTTP_REQ_RANGE_NOT_SATISFIABLE

PLS_INTEGER

416

要求にRange要求ヘッダー・フィールドが含まれている場合、サーバーはこのステータス・コードの応答を戻します。このフィールドの範囲指定子の値は選択したリソースの現在のエクステントにオーバーラップせず、要求にIf-Range要求ヘッダー・フィールドは含まれませんでした。

HTTP_EXPECTATION_FAILED

PLS_INTEGER

417

このサーバーがExpect要求ヘッダー・フィールドに指定されている期待値を満たすことができなかったか、またはサーバーがプロキシの場合は、ネクスト・ホップ・サーバーが要求を満たすことができなかった明確な証拠がサーバーに存在します。

HTTP_NOT_IMPLEMENTED

PLS_INTEGER

501

サーバーは、要求を満たすために必要な機能をサポートしていません。

HTTP_BAD_GATEWAY

PLS_INTEGER

502

ゲートウェイまたはプロキシとして動作しているサーバーが、要求を満たすためにアクセスしたアップストリーム・サーバーから無効な応答を受信しました。

HTTP_SERVICE_UNAVAILABLE

PLS_INTEGER

503

現在、サーバーは、一時的なオーバーロードまたはメンテナンスのため、要求を処理できません。

HTTP_GATEWAY_TIME_OUT

PLS_INTEGER

504

ゲートウェイまたはプロキシとして動作しているサーバーが、URI(HTTP、FTP、LDAPなど)で指定されているアップストリーム・サーバー、または要求の完了の試行時にアクセスする必要があるその他の補助サーバー(DNSなど)からタイムリな応答を受信しませんでした。

HTTP_VERSION_NOT_SUPPORTED

PLS_INTEGER

505

サーバーは、要求メッセージで使用されたHTTPプロトコルのバージョンをサポートしていないか、またはサポートすることを拒否しています。



データ型

REQタイプ

このPL/SQLレコード・タイプを使用して、HTTP要求を表します。

構文

TYPE req IS RECORD (
   url           VARCHAR2(32767),
   method        VARCHAR2(64),
   http_version  VARCHAR2(64));

パラメータ

表207-4 REQタイプのパラメータ

パラメータ 説明

url

HTTP要求のURL。BEGIN_REQUESTにより要求が作成された後に設定されます。

method

URLにより識別されたリソースで実行されるメソッド。BEGIN_REQUESTにより要求が作成された後に設定されます。

http_version

要求の送信に使用されるHTTPプロトコルのバージョン。BEGIN_REQUESTにより要求が作成された後に設定されます。


使用上の注意

インタフェースbegin_requestからREQに戻される情報は読取り専用です。レコードのフィールド値を変更しても、要求には影響はありません。

REQレコード・タイプには名前がprivate_という接頭辞で始まる他のフィールドがあります。このフィールドはプライベートで、UTL_HTTPパッケージの実装で使用することを目的としています。これらのフィールドは変更しないでください。

RESPタイプ

このPL/SQLレコード・タイプは、HTTP応答を表します。

構文

TYPE resp IS RECORD (
   status_code    PLS_INTEGER,
   reason_phrase  VARCHAR2(256),
   http_version   VARCHAR2(64));

パラメータ

表207-5 RESPタイプのパラメータ

パラメータ 説明

status_code

Webサーバーにより戻されるステータス・コード。Webサーバーにより処理されるHTTP要求の結果を示す3桁の整数です。GET_RESPONSEにより応答が処理された後に設定されます。

reason_phrase

ステータス・コードを記述するWebサーバーにより戻される短いテキスト・メッセージ。Webサーバーにより処理されるHTTP要求の結果を簡潔に説明します。GET_RESPONSEにより応答が処理された後に設定されます。

http_version

HTTP応答に使用されるHTTPプロトコルのバージョン。GET_RESPONSEにより応答が処理された後に設定されます。


使用上の注意

インタフェースGET_RESPONSEからRESPに戻される情報は読取り専用です。 RESPレコード・タイプには名前がprivate_という接頭辞で始まる他のフィールドがあります。このフィールドはプライベートで、UTL_HTTPパッケージの実装で使用することを目的としています。これらのフィールドは変更しないでください。

COOKIEタイプおよびCOOKIE_TABLEタイプ

COOKIEタイプは、HTTP Cookieを表すPL/SQLレコード・タイプです。 COOKIE_TABLEタイプは、HTTP Cookieのコレクションを表すPL/SQL索引付き表タイプです。

構文

TYPE cookie IS RECORD (
   name  VARCHAR2(256),
   value  VARCHAR2(1024),
   domain  VARCHAR2(256),
   expire  TIMESTAMP WITH TIME ZONE,
   path  VARCHAR2(1024),
   secure  BOOLEAN,
   version  PLS_INTEGER,
   comment  VARCHAR2(1024));

TYPE cookie_table IS TABLE OF cookie INDEX BY binary_integer;

COOKIEレコード・タイプのフィールド

表207-6に、COOKIEおよびCOOKIE_TABLEレコード・タイプのフィールドを示します。

表207-6 COOKIEおよびCOOKIE_TABLEタイプのフィールド

フィールド 説明

name

HTTP Cookieの名前。

value

Cookieの値。

domain

Cookieが有効なドメイン。

expire

Cookieの期限が切れる時刻。

path

Cookieを適用するURLのサブセット。

secure

セキュリティ保護された手段でのみWebサーバーにCookieを戻す必要があります。

version

Cookieが準拠するHTTP Cookie仕様のバージョン。NetscapeのCookieの場合、このフィールドはNULLです。

comment

Cookieの用途を記述したコメント。NetscapeのCookieの場合、このフィールドはNULLです。


使用上の注意

PL/SQLプログラムは通常、UTL_HTTPパッケージに格納されたCookie情報を調査または変更しません。Cookieは、パッケージが透過的に保持します。 UTL_HTTPパッケージ内部で保持され、データベース・セッションの期間のみ存続します。 データベース・セッションの期間以降もCookieの保持を必要とするPL/SQLアプリケーションは、GET_COOKIESを使用してCookieを読み込み、データベース表に永続的に格納し、次のデータベース・セッションでADD_COOKIESを使用してパッケージにCookieを戻し、再度格納できます。cookieレコードのすべてのフィールド(ただしcommentフィールドは除く)は格納する必要があります。Cookie情報は変更しないでください。変更すると、Webサーバーでアプリケーション・エラーが発生したり、PL/SQLおよびWebサーバー・アプリケーションのセキュリティに障害が発生する場合があります。詳細は、「Cookieの取出しおよびリストア」を参照してください。

CONNECTIONタイプ

このPL/SQLレコード・タイプを使用して、HTTP 1.1プロトコルの仕様に従い、HTTP要求が完了した後に永続的に保持されるネットワーク接続のリモート・ホストおよびTCP/IPポートを表します。永続的なネットワーク接続は、後続のHTTP要求により同じホストおよびポートに対して再利用できる可能性があります。 ネットワーク接続の待機時間が回避されるため、後続のHTTP要求は高速に処理されます。connection_tableは、connectionのPL/SQL表です。

Webサーバーに直接HTTPを永続的に接続する場合は、hostおよびportフィールドにWebサーバーのホスト名およびTCP/IPポート番号が含まれます。 proxy_hostフィールドおよびproxy_portフィールドは設定されません。 プロキシを使用してWebサーバーへの接続に以前使用されていたHTTPに永続的に接続する場合は、proxy_hostフィールドおよびproxy_portフィールドにプロキシ・サーバーのホスト名およびTCP/IPポート番号が含まれます。hostおよびportフィールドは設定されません。これは、プロキシ・サーバーに接続している間、永続的接続が特定のターゲットWebサーバーにバインドされないことを示します。プロキシ・サーバーへのHTTPの永続的接続を使用して、プロキシを使用するターゲットWebサーバーにアクセスできます。

SSLフィールドは、Secure Sockets Layer(SSL)がHTTPの永続的接続で使用されているかどうかを示します。HTTPS要求は、SSLを介して作成されたHTTP要求です。プロキシを使用して接続したHTTPS(SSL)の永続的接続の場合は、hostおよびportフィールドにターゲットHTTPS Webサーバーのホスト名およびTCP/IPポート番号が含まれます。これらのフィールドは常に設定されます。プロキシ・サーバーを使用してHTTPS Webサーバーに永続的にHTTPS接続を行った場合は、同じターゲットWebサーバーに別の要求を行う場合にのみ再利用できます。

構文

TYPE connection IS RECORD (
   host  VARCHAR2(256),
   port  PLS_INTEGER,
   proxy_host  VARCHAR2(256),
   proxy_port  PLS_INTEGER,
   ssl  BOOLEAN);

TYPE connection_table IS TABLE OF connection INDEX BY BINARY_INTEGER;

使用上の注意

操作フロー

UTL_HTTPパッケージはHTTPプロトコルへのアクセスを提供します。 インタフェースは、図207-1に表示されている順序でコールしてください。異なる順序でコールすると例外が発生します。

図207-1 UTL_HTTPパッケージのコア・フロー

図207-1の説明が続きます。
「図207-1 UTL_HTTPパッケージのコア・フロー」の説明

随時、次をコールできます。

単純なHTTPのフェッチ

REQUESTおよびREQUEST_PIECESは、Uniform Resource Locator(URL)の文字列を使用し、サイトに接続して、そのサイトで取得したデータ(通常はHTML)を戻します。

同一マシン(同一の権限や環境変数など)でブラウザを使用してURLに接続できない場合、REQUESTまたはREQUEST_PIECESで、そのURLへの接続が成功することは期待できません。

REQUESTまたはREQUEST_PIECESに失敗した場合(たとえば、例外が発生した場合やHTML形式のエラー・メッセージが戻された場合で、URL引数は正しいと考えられる場合)は、ブラウザで同じURLに接続を試みて、ユーザーのマシンからネットワークの可用性を検証します。 ユーザーのブラウザにプロキシ・サーバー・セットがある場合、そのセットは、オプションのproxyパラメータを使用してREQUESTまたはREQUEST_PIECESの各コールごとに設定する必要があります。


注意:

UTL_HTTPでは、環境変数を使用してそのプロキシ動作を指定することもできます。 たとえば、UNIXでは、環境変数http_proxyをURLに設定することによって、そのサービスをHTTP要求のプロキシ・サーバーとして使用するように指定します。 また、環境変数no_proxyをドメイン名に設定することによって、そのドメインのURLではHTTPプロキシ・サーバーを使用しないように指定します。 UTL_HTTPパッケージがOracle Databaseサーバーで実行される場合、データベース・インスタンスの開始時に設定された環境設定が使用されます。

セッションの設定

HTTP要求がデータベースのユーザー・セッション内で実行される場合、セッションの設定によりUTL_HTTPの構成およびデフォルトの動作を操作します。要求が作成されると、現行のセッションのHTTP Cookieサポート、リダイレクトへの準拠、本体キャラクタ・セット、永続的接続のサポートおよび転送タイムアウトのデフォルト設定が継承されます。これらの設定は、要求インタフェースをコールすることにより後で変更できます。要求に対する応答が作成されると、この要求からこれらの設定が継承されます。応答インタフェースをコールすることにより後で変更できるのは、本体キャラクタ・セットのみです。

HTTP要求

サブプログラムのHTTP要求グループは、HTTP要求を開始し、属性を操作し、要求情報をWebサーバーに送信します。要求が作成されると、現行のセッションのHTTP Cookieサポート、リダイレクトへの準拠、本体キャラクタ・セット、永続的接続のサポートおよび転送タイムアウトのデフォルト設定が継承されます。これらの設定は、要求インタフェースをコールすることにより変更できます。

HTTP応答

サブプログラムのHTTP応答グループは、GET_RESPONSEから取得したHTTP応答を操作し、Webサーバーから応答情報を受信します。応答が要求に対して作成されると、要求からHTTP Cookieサポート、リダイレクトへの準拠、本体キャラクタ・セット、永続的接続のサポートおよび転送タイムアウトについての設定が継承されます。応答インタフェースをコールすることにより変更できるのは、本体キャラクタ・セットのみです。

HTTP Cookie

UTL_HTTPパッケージでは、HTTP Cookieを操作するためのサブプログラムが提供されます。

HTTPの永続的接続

UTL_HTTPパッケージでは、永続的接続を操作するためのサブプログラムが提供されます。

エラー条件

UTL_HTTPパッケージでは、エラー情報を取り出すためのサブプログラムが提供されます。


例外

表207-7に、UTL_HTTPパッケージのインタフェースで発生する可能性のある例外を示します。 デフォルトでは、要求の実行に失敗するとUTL_HTTPによりrequest_failed例外が発生します。 set_detailed_excp_supportにより詳細な例外が発生するようにパッケージが設定されている場合、残りの例外は直接発生します。ただし、end_of_body例外は除きます。この例外は設定にかかわらず、READ_TEXTREAD_LINEおよびREAD_RAWにより呼び出されます。

表207-7 UTL_HTTPの例外

例外 エラー・コード 理由 発生した場所

REQUEST_FAILED

29273

要求の実行に失敗しました。

detailed_exceptionが無効な場合のHTTP要求インタフェースまたはHTTP応答インタフェース。

BAD_ARGUMENT

29261

インタフェースに渡された引数が不適切です。

detailed_exceptionが有効な場合のHTTP要求インタフェースまたはHTTP応答インタフェース。

BAD_URL

29262

要求されたURLの構成が不適切です。

detailed_exceptionが有効な場合のBEGIN_REQUEST

PROTOCOL_ERROR

29263

Webサーバーとの通信でHTTPプロトコルのエラーが発生しました。

detailed_exceptionが有効な場合のSET_HEADERGET_RESPONSEREAD_RAWREAD_TEXTおよびREAD_LINE

UNKNOWN_SCHEME

29264

要求されたURLのスキームが不明です。

detailed_exceptionが有効な場合のBEGIN_REQUESTおよびGET_RESPONSE

HEADER_NOT_FOUND

29265

ヘッダーが見つかりません。

detailed_exceptionが有効な場合のGET_HEADERおよびGET_HEADER_BY_NAME

END_OF_BODY

29266

HTTP応答本体の終わりに到達しています。

detailed_exceptionが有効な場合のREAD_RAWREAD_TEXTおよびREAD_LINE

ILLEGAL_CALL

29267

HTTP要求の現在の状態ではUTL_HTTPへのコールが不正です。

detailed_exceptionが有効な場合のSET_HEADERSET_AUTHENTICATIONおよびSET_PERSISTENT_CONN_SUPPORT

HTTP_CLIENT_ERROR

29268

GET_RESPONSEで、応答ステータス・コードがクライアントでのエラー発生を示しています(4xxのステータス・コード)。 または、begin_requestで、HTTPプロキシが、プロキシ経由のHTTPS要求時に4xxのステータス・コードを戻しています。

detailed_exceptionが有効な場合のGET_RESPONSEおよびBEGIN_REQUEST

HTTP_SERVER_ERROR

29269

GET_RESPONSEで、応答ステータス・コードがクライアントでのエラー発生を示しています(5xxのステータス・コード)。 または、begin_requestで、HTTPプロキシが、プロキシ経由のHTTPS要求時に5xxのステータス・コードを戻しています。

detailed_exceptionが有効な場合のGET_RESPONSEおよびBEGIN_REQUEST

TOO_MANY_REQUESTS

29270

オープンされている要求または応答が多すぎます。

detailed_exceptionが有効な場合のBEGIN_REQUEST

PARTIAL_MULTIBYTE_EXCEPTION

29275

完全に読み込まれた文字はありません。応答本体の終わりにマルチバイト・キャラクタの一部が検出されました。

detailed_exceptionが有効な場合のREAD_TEXTおよびREAD_LINE

TRANSFER_TIMEOUT

29276

データが読み込まれず、読込みタイムアウトが発生しました。

detailed_exceptionが有効な場合のREAD_TEXTおよびREAD_LINE



注意:

partial_multibyte_charおよびtransfer_timeoutの例外は、UTL_TCPで定義された同じ例外の複製です。 これらは、パッケージを使用するときにUTL_TCPの知識を必要としなくても済むように、このパッケージで定義されています。 これらの例外は複製であるため、このパッケージのpartial_multibyte_charおよびtransfer_timeout例外を補足する例外ハンドルは、UTL_TCPの例外も捕捉します。

REQUESTおよびREQUEST_PIECESでは、なんらかの例外が発生してdetailed_exceptionが無効な場合に、request_failed例外が発生します。


次の例では、UTL_HTTPの使用方法を示します。

一般的な使用方法

SET SERVEROUTPUT ON SIZE 40000

DECLARE
  req   UTL_HTTP.REQ;
  resp  UTL_HTTP.RESP;
  value VARCHAR2(1024);
BEGIN
  UTL_HTTP.SET_PROXY('proxy.my-company.com', 'corp.my-company.com');
  req := UTL_HTTP.BEGIN_REQUEST('http://www-hr.corp.my-company.com');
  UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/4.0');
  resp := UTL_HTTP.GET_RESPONSE(req);
  LOOP
    UTL_HTTP.READ_LINE(resp, value, TRUE);
    DBMS_OUTPUT.PUT_LINE(value);
  END LOOP;
  UTL_HTTP.END_RESPONSE(resp);
EXCEPTION
  WHEN UTL_HTTP.END_OF_BODY THEN
    UTL_HTTP.END_RESPONSE(resp);
END;

HTTP応答ヘッダーの取出し

SET SERVEROUTPUT ON SIZE 40000

DECLARE
  req   UTL_HTTP.REQ;
  resp  UTL_HTTP.RESP;
  name  VARCHAR2(256);
  value VARCHAR2(1024);
BEGIN
  UTL_HTTP.SET_PROXY('proxy.my-company.com', 'corp.my-company.com');
  req := UTL_HTTP.BEGIN_REQUEST('http://www-hr.corp.my-company.com');
  UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/4.0');
  resp := UTL_HTTP.GET_RESPONSE(req);
  DBMS_OUTPUT.PUT_LINE('HTTP response status code: ' || resp.status_code);
  DBMS_OUTPUT.PUT_LINE('HTTP response reason phrase: ' || resp.reason_phrase);
  FOR i IN 1..UTL_HTTP.GET_HEADER_COUNT(resp) LOOP
    UTL_HTTP.GET_HEADER(resp, i, name, value);
    DBMS_OUTPUT.PUT_LINE(name || ': ' || value);
  END LOOP;
  UTL_HTTP.END_RESPONSE(resp);
END;

HTTP認証の処理

SET serveroutput ON SIZE 40000

CREATE OR REPLACE PROCEDURE get_page (url      IN VARCHAR2,
                                      username IN VARCHAR2 DEFAULT NULL,
                                      password IN VARCHAR2 DEFAULT NULL,
                                      realm    IN VARCHAR2 DEFAULT NULL) AS
  req       UTL_HTTP.REQ;
  resp      UTL_HTTP.RESP;
  my_scheme VARCHAR2(256);
  my_realm  VARCHAR2(256);
  my_proxy  BOOLEAN;
BEGIN
  -- Turn off checking of status code. We will check it by ourselves.
  UTL_HTTP.HTTP_RESPONSE_ERROR_CHECK(FALSE);
  req := UTL_HTTP.BEGIN_REQUEST(url);
  IF (username IS NOT NULL) THEN
    UTL_HTTP.SET_AUTHENTICATION(req, username, password); -- Use HTTP Basic Authen. Scheme
  END IF;
  resp := UTL_HTTP.GET_RESPONSE(req);
  IF (resp.status_code = UTL_HTTP.HTTP_UNAUTHORIZED) THEN
    UTL_HTTP.GET_AUTHENTICATION(resp, my_scheme, my_realm, my_proxy);
    IF (my_proxy) THEN
       DBMS_OUTPUT.PUT_LINE('Web proxy server is protected.');
       DBMS_OUTPUT.PUT('Please supplied the required ' || my_scheme || ' authentication username/password for realm ' || my_realm || ' for the proxy server.');
    ELSE
      DBMS_OUTPUT.PUT_LINE('Web page ' || url || ' is protected.');
      DBMS_OUTPUT.PUT('Please supplied the required ' || my_scheme || ' authentication username/password for realm ' || my_realm || ' for the Web page.');
    END IF;
    UTL_HTTP.END_RESPONSE(resp);
    RETURN;
  END IF;
  FOR i IN 1..UTL_HTTP.GET_HEADER_COUNT(resp) LOOP
    UTL_HTTP.GET_HEADER(resp, i, name, value);
    DBMS_OUTPUT.PUT_LINE(name || ': ' || value);
  END LOOP;
  UTL_HTTP.END_RESPONSE(resp);
END;

Cookieの取出しおよびリストア

CREATE TABLE my_cookies (
    session_id  INTEGER,
    name        VARCHAR2(256),
    value       VARCHAR2(1024),
    domain      VARCHAR2(256),
    expire      DATE,
    path        VARCHAR2(1024),
    secure      VARCHAR2(1),
    version     INTEGER);

CREATE SEQUENCE session_id;
SET SERVEROUTPUT ON SIZE 40000

REM Retrieve cookies from UTL_HTTP
CREATE OR REPLACE FUNCTION save_cookies RETURN PLS_INTEGER AS
  cookies        UTL_HTTP.COOKIE_TABLE;
  my_session_id  PLS_INTEGER;
  secure         VARCHAR2(1);
BEGIN
  /* assume that some cookies have been set in previous HTTP requests. */
  UTL_HTTP.GET_COOKIES(cookies);
  SELECT session_id.nextval INTO my_session_id FROM DUAL;
  FOR i in 1..cookies.count LOOP
    IF (cookies(i).secure) THEN
      secure := 'Y';
    ELSE
      secure := 'N';
    END IF;
    INSERT INTO my_cookies
    VALUES (my_session_id, cookies(i).name, cookies(i).value,
            cookies(i).domain,
            cookies(i).expire, cookies(i).path, secure, cookies(i).version);
  END LOOP;
  RETURN my_session_id;
END;
/

REM Retrieve cookies from UTL_HTTP
CREATE OR REPLACE PROCEDURE restore_cookies (this_session_id IN PLS_INTEGER)
AS
  cookies        UTL_HTTP.COOKIE_TABLE;
  cookie         UTL_HTTP.COOKIE;
  i              PLS_INTEGER := 0;
  CURSOR c (c_session_id PLS_INTEGER) IS
    SELECT * FROM my_cookies WHERE session_id = c_session_id;
BEGIN
  FOR r IN c(this_session_id) LOOP
    i := i + 1;
    cookie.name     := r.name;
    cookie.value    := r.value;
    cookie.domain   := r.domain;
    cookie.expire   := r.expire;
    cookie.path     := r.path;
    IF (r.secure = 'Y') THEN
      cookie.secure := TRUE;
    ELSE
      cookie.secure := FALSE;
    END IF;
    cookie.version := r.version;
    cookies(i) := cookie;
  END LOOP;
  UTL_HTTP.CLEAR_COOKIES;
  UTL_HTTP.ADD_COOKIES(cookies);
END;
/

サブプログラム・グループ

UTL_HTTP のサブプログラムは、機能ごとに次のようにグループ分けされています。


単一コール・サブプログラムでの単純なHTTPのフェッチ

REQUESTおよびREQUEST_PIECESは、Uniform Resource Locator(URL)の文字列を使用し、サイトに接続して、そのサイトで取得したデータ(通常はHTML)を戻します。

表207-8 UTL_HTTPサブプログラム: 単一コールでの単純なHTTPのフェッチ

サブプログラム 説明

REQUESTファンクション


指定したURLから取り出したデータの最初の2000バイトまでを戻します。このファンクションは、SQL問合せで直接使用できます。

REQUEST_PIECESファンクション


指定したURLから取り出したデータについて、2000バイト・ピースのPL/SQL表を戻します。



セッションの設定サブプログラム

表207-9 UTL_HTTPサブプログラム: セッションの設定

サブプログラム 説明

GET_BODY_CHARSETプロシージャ


将来のHTTP要求すべての本体におけるデフォルトのキャラクタ・セットを取り出します。

GET_COOKIE_SUPPORTプロシージャ


現在のCookieのサポート設定を取り出します。

GET_DETAILED_EXCP_SUPPORTプロシージャ


UTL_HTTPパッケージが詳細な例外を呼び出すかどうかをチェックします。

GET_FOLLOW_REDIRECTプロシージャ


現行のセッションでのfollow_redirectの設定を取り出します。

GET_PERSISTENT_CONN_SUPPORTプロシージャ


永続的接続のサポートが有効かどうかをチェックし、現行のセッションでの永続的接続の最大回数を取得します。

GET_PROXYプロシージャ


現在のプロキシ設定を取り出します。

GET_RESPONSE_ERROR_CHECKプロシージャ


応答エラー・チェックが設定されているかどうかをチェックします。

GET_TRANSFER_TIMEOUTプロシージャ


現在のネットワーク転送のタイムアウト値を取り出します。

SET_TRANSFER_TIMEOUTプロシージャ


メディア・タイプがtextで、キャラクタ・セットがContent-Typeヘッダーで指定されていない場合、将来のすべてのHTTP要求本体におけるデフォルトのキャラクタ・セットを設定します。

SET_COOKIE_SUPPORTプロシージャ


将来のHTTP要求がHTTP Cookieをサポートするかどうかを設定し、現在のデータベース・ユーザー・セッションで保持されるCookieの最大数を設定します。

SET_DETAILED_EXCP_SUPPORTプロシージャ


UTL_HTTPパッケージが詳細な例外を呼び出すように設定します。

SET_FOLLOW_REDIRECTプロシージャ


GET_RESPONSEファンクションでの将来の要求に対するHTTP応答において、HTTPリダイレクトの指示にUTL_HTTPが従う最大回数を設定します。

SET_PERSISTENT_CONN_SUPPORTプロシージャ


将来のHTTP要求がHTTP 1.1の永続的接続をサポートするかどうかを設定し、現在のデータベース・ユーザー・セッションで保持される永続的接続の最大回数を設定します。

SET_PROXYプロシージャ


HTTPまたは他のプロトコルの要求で使用するプロキシを設定します。

SET_RESPONSE_ERROR_CHECKプロシージャ


Webサーバーがエラーを示すステータス・コード(4xxまたは5xx)を戻した場合に、GET_RESPONSEが例外を呼び出すかどうかを設定します。

SET_TRANSFER_TIMEOUTプロシージャ


UTL_HTTPがWebサーバーまたはプロキシ・サーバーからHTTP応答を読み込むタイムアウト値を設定します。

SET_WALLETプロシージャ


Secure Sockets Layer(SSL)、つまり、HTTPSを経由するHTTP要求すべてに使用するOracle Walletを設定します。



HTTP要求サブプログラム

表207-10 UTL_HTTPサブプログラム: HTTP要求

サブプログラム 説明

BEGIN_REQUESTファンクション


新しいHTTP要求を開始します。UTL_HTTPはターゲットWebサーバーまたはプロキシ・サーバーへのネットワーク接続を確立し、HTTP要求行を送信します。

END_REQUESTプロシージャ


HTTP要求を終了します。

SET_HEADERプロシージャ


HTTP要求ヘッダーを設定します。要求ヘッダーは、設定後ただちにWebサーバーに送信されます。

SET_AUTHENTICATIONプロシージャ


HTTP要求ヘッダーのHTTP認証情報を設定します。Webサーバーが要求を認証するにはこの情報が必要です。

SET_BODY_CHARSETプロシージャ


メディア・タイプがtextで、キャラクタ・セットがContent-Typeヘッダーで指定されていない場合は、要求本体のデフォルトのキャラクタ・セットを設定します。

SET_COOKIE_SUPPORTプロシージャ


要求のHTTP Cookieのサポートを有効または無効にします。

SET_FOLLOW_REDIRECTプロシージャ


GET_RESPONSEファンクションでのこの要求に対するHTTP応答において、HTTPリダイレクトの指示にUTL_HTTPが従う最大回数を設定します。

SET_PERSISTENT_CONN_SUPPORTプロシージャ


要求のHTTP 1.1の永続的接続のサポートを有効または無効にします。

SET_PROXYプロシージャ


HTTP要求本体にテキスト行を書き込み、改行文字(UTL_TCPで定義されるCRLF)を使用して行を終了します。

WRITE_RAWプロシージャ


HTTP要求本体にバイナリ・データを書き込みます。

WRITE_TEXTプロシージャ


HTTP要求本体にテキスト・データを書き込みます。



HTTP応答サブプログラム

表207-11 UTL_HTTPサブプログラム: HTTP応答

サブプログラム 説明

END_RESPONSEプロシージャ


HTTP応答を終了します。HTTP要求および応答を完了します。

GET_AUTHENTICATIONプロシージャ


Webサーバーが受け入れる要求に必要なHTTP認証情報を、HTTP応答ヘッダーの指示に従って取り出します。

GET_HEADERプロシージャ


応答で戻されたn回目のHTTP応答ヘッダーの名前および値を戻します。

GET_HEADER_BY_NAMEプロシージャ


特定のヘッダー名を持つ応答に戻されたHTTP応答ヘッダーの値を戻します。

GET_HEADER_COUNTファンクション


応答で戻されたHTTP応答ヘッダーの数を戻します。

GET_RESPONSEファンクション


HTTP応答を読み込みます。ファンクションが戻ると、ステータス行およびHTTP応答ヘッダーが読み込まれて処理されます。

READ_LINEプロシージャ


HTTP応答本体を行末までテキスト形式で読み込み、コール元が提供したバッファに出力を戻します。

READ_RAWプロシージャ


HTTP応答本体をバイナリ形式で読み込み、コール元が指定したバッファに出力を戻します。

READ_TEXTプロシージャ


HTTP応答本体をテキスト形式で読み込み、コール元が指定したバッファに出力を戻します。

SET_BODY_CHARSETプロシージャ


メディア・タイプがtextで、キャラクタ・セットがContent-Typeヘッダーで指定されていない場合は、応答本体のキャラクタ・セットを設定します。



HTTP Cookieサブプログラム

表207-12 UTL_HTTPサブプログラム: HTTP Cookie

サブプログラム 説明

ADD_COOKIESプロシージャ


UTL_HTTPに保持されるCookieを追加します。

CLEAR_COOKIESプロシージャ


UTL_HTTPパッケージが保持するCookieをすべてクリアします。

GET_COOKIE_COUNTファンクション


すべてのWebサーバーにより設定されたUTL_HTTPパッケージが現在保持するCookieの数を戻します。

GET_COOKIESファンクション


すべてのWebサーバーにより設定されたUTL_HTTPパッケージが現在保持するすべてのCookieを戻します。



HTTPの永続的接続サブプログラム

表207-13 UTL_HTTPサブプログラム: HTTPの永続的接続

サブプログラム 説明

CLOSE_PERSISTENT_CONNプロシージャ


現在のデータベース・セッションでUTL_HTTPパッケージが保持するHTTPの永続的接続をクローズします。

CLOSE_PERSISTENT_CONNSプロシージャ


現在のデータベース・セッションでUTL_HTTPパッケージが保持するHTTPの永続的接続のグループをクローズします。

GET_PERSISTENT_CONN_COUNTファンクション


UTL_HTTPパッケージにより現在永続的に保持されているネットワーク接続数をWebサーバーに戻します。

GET_PERSISTENT_CONNSプロシージャ


UTL_HTTPパッケージにより現在永続的に保持されているネットワーク接続をすべてWebサーバーに戻します。



エラー条件のサブプログラム

表207-14 UTL_HTTPサブプログラム: エラー条件

サブプログラム 説明

GET_DETAILED_SQLCODEファンクション


最後に発生した例外の詳細なSQLCODEを取り出します。

GET_DETAILED_SQLERRMファンクション


最後に発生した例外の詳細なSQLERRMを取り出します。



UTL_HTTPサブプログラムの要約

表207-15 UTL_HTTPパッケージのサブプログラム

サブプログラム 説明 グループ

ADD_COOKIESプロシージャ


UTL_HTTPに保持されるCookieを追加します。

HTTP Cookieサブプログラム


BEGIN_REQUESTファンクション


新しいHTTP要求を開始します。 UTL_HTTPはターゲットWebサーバーまたはプロキシ・サーバーへのネットワーク接続を確立し、HTTP要求行を送信します。

HTTP要求サブプログラム


CLEAR_COOKIESプロシージャ


UTL_HTTPパッケージが保持するCookieをすべてクリアします。

HTTP Cookieサブプログラム


CLOSE_PERSISTENT_CONNプロシージャ


現在のデータベース・セッションでUTL_HTTPパッケージが保持するHTTPの永続的接続をクローズします。

HTTPの永続的接続サブプログラム


CLOSE_PERSISTENT_CONNSプロシージャ


現在のデータベース・セッションでUTL_HTTPパッケージが保持するHTTPの永続的接続のグループをクローズします。

HTTPの永続的接続サブプログラム


END_REQUESTプロシージャ


HTTP要求を終了します。

HTTP要求サブプログラム


END_RESPONSEプロシージャ


HTTP応答を終了します。HTTP要求および応答を完了します。

HTTP応答サブプログラム


GET_AUTHENTICATIONプロシージャ


Webサーバーが受け入れる要求に必要なHTTP認証情報を、HTTP応答ヘッダーの指示に従って取り出します。

HTTP応答サブプログラム


GET_BODY_CHARSETプロシージャ


将来のHTTP要求すべての本体におけるデフォルトのキャラクタ・セットを取り出します。

セッションの設定サブプログラム


GET_COOKIE_COUNTファンクション


すべてのWebサーバーにより設定されたUTL_HTTPパッケージが現在保持するCookieの数を戻します。

HTTP Cookieサブプログラム


GET_COOKIE_SUPPORTプロシージャ


現在のCookieのサポート設定を取り出します。

セッションの設定サブプログラム


GET_COOKIESファンクション


すべてのWebサーバーにより設定されたUTL_HTTPパッケージが現在保持するすべてのCookieを戻します。

HTTP Cookieサブプログラム


GET_DETAILED_EXCP_SUPPORTプロシージャ


UTL_HTTPパッケージが詳細な例外を呼び出すかどうかをチェックします。

セッションの設定サブプログラム


GET_DETAILED_SQLCODEファンクション


最後に発生した例外の詳細なSQLCODEを取り出します。

エラー条件のサブプログラム


GET_DETAILED_SQLERRMファンクション


最後に発生した例外の詳細なSQLERRMを取り出します。

エラー条件のサブプログラム


GET_FOLLOW_REDIRECTプロシージャ


現行のセッションでのfollow_redirectの設定を取り出します。

セッションの設定サブプログラム


GET_HEADERプロシージャ


応答で戻されたn回目のHTTP応答ヘッダーの名前および値を戻します。

HTTP応答サブプログラム


GET_HEADER_BY_NAMEプロシージャ


特定のヘッダー名を持つ応答に戻されたHTTP応答ヘッダーの値を戻します。

HTTP応答サブプログラム


GET_HEADER_COUNTファンクション


応答で戻されたHTTP応答ヘッダーの数を戻します。

HTTP応答およびHTTP応答サブプログラム

GET_PERSISTENT_CONN_COUNTファンクション


UTL_HTTPパッケージにより現在永続的に保持されているネットワーク接続数をWebサーバーに戻します。

HTTPの永続的接続サブプログラム


GET_HEADER_COUNTファンクション


将来のHTTP要求がHTTP 1.1の永続的接続をサポートするかどうかを確認し、現在のデータベース・ユーザー・セッションで保持される永続的接続の最大回数を設定します。

セッションの設定サブプログラム


GET_PERSISTENT_CONN_SUPPORTプロシージャ


永続的接続のサポートが有効かどうかを確認し、現行のセッションでの永続的接続の最大回数を取得します(「セッションの設定サブプログラム」を参照)。

HTTPの永続的接続サブプログラム


GET_PERSISTENT_CONNSプロシージャ


UTL_HTTPパッケージにより現在永続的に保持されているネットワーク接続をすべてWebサーバーに戻します。

HTTPの永続的接続サブプログラム


GET_PROXYプロシージャ


現在のプロキシ設定を取り出します。

セッションの設定サブプログラム


GET_RESPONSEファンクション


HTTP応答を読み込みます。ファンクションが戻ると、ステータス行およびHTTP応答ヘッダーが読み込まれて処理されます。

HTTP応答サブプログラム


GET_RESPONSE_ERROR_CHECKプロシージャ


応答エラー・チェックが設定されているかどうかをチェックします。

セッションの設定サブプログラム


GET_TRANSFER_TIMEOUTプロシージャ


現在のネットワーク転送のタイムアウト値を取り出します。

セッションの設定サブプログラム


READ_LINEプロシージャ


HTTP応答本体を行末までテキスト形式で読み込み、コール元が提供したバッファに出力を戻します。

HTTP応答サブプログラム


READ_RAWプロシージャ


HTTP応答本体をバイナリ形式で読み込み、コール元が指定したバッファに出力を戻します。

HTTP応答サブプログラム


READ_TEXTプロシージャ


HTTP応答本体をテキスト形式で読み込み、コール元が指定したバッファに出力を戻します。

HTTP応答サブプログラム


REQUESTファンクション


指定したURLから取り出したデータの最初の2000バイトまでを戻します。このファンクションは、SQL問合せで直接使用できます。

単一コール・サブプログラムでの単純なHTTPのフェッチ


REQUEST_PIECESファンクション


指定したURLから取り出したデータについて、2000バイト・ピースのPL/SQL表を戻します。

単一コール・サブプログラムでの単純なHTTPのフェッチ


SET_AUTHENTICATIONプロシージャ


HTTP要求ヘッダーのHTTP認証情報を設定します。Webサーバーが要求を認証するにはこの情報が必要です。

HTTP要求サブプログラム


SET_BODY_CHARSETプロシージャ


メディア・タイプがtextで、キャラクタ・セットがContent-Typeヘッダーで指定されていない場合、将来のすべてのHTTP要求本体におけるデフォルトのキャラクタ・セットを設定します。

セッションの設定サブプログラム


SET_BODY_CHARSETプロシージャ


メディア・タイプがtextで、キャラクタ・セットがContent-Typeヘッダーで指定されていない場合は、要求本体のデフォルトのキャラクタ・セットを設定します。

HTTP要求サブプログラム


SET_BODY_CHARSETプロシージャ


メディア・タイプがtextで、キャラクタ・セットがContent-Typeヘッダーで指定されていない場合は、応答本体のキャラクタ・セットを設定します。

HTTP応答サブプログラムおよびセッションの設定サブプログラム

SET_COOKIE_SUPPORTプロシージャ


要求のHTTP Cookieのサポートを有効または無効にします。

HTTP要求サブプログラム


SET_DETAILED_EXCP_SUPPORTプロシージャ


将来のHTTP要求がHTTP Cookieをサポートするかどうかを設定し、現在のデータベース・ユーザー・セッションで保持されるCookieの最大数を設定します。

セッションの設定サブプログラム


SET_DETAILED_EXCP_SUPPORTプロシージャ


UTL_HTTPパッケージが詳細な例外を呼び出すように設定します。

セッションの設定サブプログラム


SET_FOLLOW_REDIRECTプロシージャ


GET_RESPONSEファンクションでの要求に対するHTTP応答において、HTTPリダイレクトの指示にUTL_HTTPが従う最大回数を設定します。

HTTP要求サブプログラム


SET_HEADERプロシージャ


GET_RESPONSEファンクションでの将来の要求に対するHTTP応答において、HTTPリダイレクトの指示にUTL_HTTPが従う最大回数を設定します。

セッションの設定サブプログラム


SET_HEADERプロシージャ


HTTP要求ヘッダーを設定します。要求ヘッダーは、設定後ただちにWebサーバーに送信されます。

HTTP要求サブプログラム


SET_PERSISTENT_CONN_SUPPORTプロシージャ


要求のHTTP 1.1の永続的接続のサポートを有効または無効にします。

HTTP要求サブプログラム


SET_PROXYプロシージャ


HTTPまたは他のプロトコルの要求で使用するプロキシを設定します。

セッションの設定およびセッションの設定サブプログラム

SET_RESPONSE_ERROR_CHECKプロシージャ


Webサーバーがエラーを示すステータス・コード(4xxまたは5xx)を戻した場合に、GET_RESPONSEが例外を呼び出すかどうかを設定します。

セッションの設定サブプログラム


SET_TRANSFER_TIMEOUTプロシージャ


UTL_HTTPがWebサーバーまたはプロキシ・サーバーからHTTP応答を読み込むタイムアウト値を設定します。

セッションの設定およびセッションの設定サブプログラム

SET_WALLETプロシージャ


Secure Sockets Layer(SSL)、つまり、HTTPSを経由するHTTP要求すべてに使用するOracle Walletを設定します。

セッションの設定サブプログラム


WRITE_LINEプロシージャ


HTTP要求本体にテキスト行を書き込み、改行文字(UTL_TCPで定義されるCRLF)を使用して行を終了します。

HTTP要求サブプログラム


WRITE_RAWプロシージャ


HTTP要求本体にバイナリ・データを書き込みます。

HTTP要求サブプログラム


WRITE_TEXTプロシージャ


HTTP要求本体にテキスト・データを書き込みます。

HTTP要求サブプログラム




ADD_COOKIESプロシージャ

このプロシージャは、UTL_HTTPに保持されるCookieを追加します。

構文

UTL_HTTP.ADD_COOKIES (
   cookies  IN cookie_table);

パラメータ

表207-16 ADD_COOKIESプロシージャのパラメータ

パラメータ 説明

cookies

追加されるCookie。


使用上の注意

パッケージが現在保持するCookieは、新しいCookieが追加されるまでクリアされません。


BEGIN_REQUESTファンクション

このファンクションは、新しいHTTP要求を開始します。 UTL_HTTPはターゲットWebサーバーまたはプロキシ・サーバーへのネットワーク接続を確立し、HTTP要求行を送信します。PL/SQLプログラムは、他のインタフェースをコールして要求を継続し、完了します。URLには、サーバーへの要求を認証するために必要なユーザー名とパスワードが含まれている場合があります。書式は次のとおりです。

scheme://[user[:password]@]host[:port]/[...]

構文

UTL_HTTP.BEGIN_REQUEST (
   url           IN VARCHAR2,
   method        IN VARCHAR2 DEFAULT 'GET',
   http_version  IN VARCHAR2 DEFAULT NULL)
RETURN req;

パラメータ

表207-17 BEGIN_REQUESTファンクションのパラメータ

パラメータ 説明

url

HTTP要求のURL。

method

URLにより識別されたリソースで実行されるメソッド。

http_version

要求の送信に使用されるHTTPプロトコルのバージョン。プロトコル・バージョンの形式はHTTP/major-version.minor-versionです。major-versionおよびminor-versionは正の値です。 このパラメータがNULLの場合、UTL_HTTPは、サポートされているHTTPプロトコルの最新バージョンを使用して要求を送信します。パッケージがサポートする最新バージョンは1.1ですが、次のバージョンにアップグレード可能です。デフォルトはNULLです。


使用上の注意


CLEAR_COOKIESプロシージャ

このプロシージャは、UTL_HTTPパッケージが保持するCookieをすべてクリアします。

構文

UTL_HTTP.CLEAR_COOKIES;

CLOSE_PERSISTENT_CONNプロシージャ

このプロシージャは、現在のデータベース・セッションでUTL_HTTPパッケージが保持するHTTPの永続的接続をクローズします。

構文

UTL_HTTP.CLOSE_PERSISTENT_CONN (
   conn  IN connection);

パラメータ

表207-18 CLOSE_PERSISTENT_CONNプロシージャのパラメータ

パラメータ 説明

conn

クローズするHTTP永続的接続。



CLOSE_PERSISTENT_CONNSプロシージャ

このプロシージャは、現在のデータベース・セッションでUTL_HTTPパッケージが保持するHTTPの永続的接続のグループをクローズします。このプロシージャは、パターンを一致させる方法を使用して、クローズする永続的接続を判別します。

共通のプロパティ(特定のホストへのすべての接続やすべてのSSL接続など)を共有するHTTP永続的接続のグループをクローズするには、特定のパラメータを設定して残りのパラメータをNULLにします。このプロシージャがコールされたときにNULLに設定されていたパラメータは、クローズする接続の判別に使用されません。

たとえば、次のコールをプロシージャに使用して、foobarへの永続的接続をすべてクローズします。

UTL_HTTP.CLOSE_PERSISTENT_CONNS(host => 'foobar');

プロシージャに次のコールを使用すると、foobarを介してTCP/IPポート80の永続的接続をすべてクローズします。

UTL_HTTP.CLOSE_PERSISTENT_CONNS(proxy_host => 'foobar',
                                proxy_port => 80);

次のコールをプロシージャに使用して、永続的接続をすべてクローズします。

UTL_HTTP.CLOSE_PERSISTENT_CONNS;

構文

UTL_HTTP.CLOSE_PERSISTENT_CONNS (
   host        IN VARCHAR2 DEFAULT NULL,
   port        IN PLS_INTEGER DEFAULT NULL,
   proxy_host  IN VARCHAR2 DEFAULT NULL,
   proxy_port  IN PLS_INTEGER DEFAULT NULL,
   ssl         IN BOOLEAN DEFAULT NULL);

パラメータ

表207-19 CLOSE_PERSISTENT_CONNSプロシージャのパラメータ

パラメータ 説明

host

永続的接続をクローズするホスト。

port

永続的接続をクローズするポート番号。

proxy_host

永続的接続をクローズするプロキシ・ホスト。

proxy_port

永続的接続をクローズするプロキシ・ポート。

ssl

永続的なSSL接続をクローズします。


使用上の注意

異なるTCP/IPポートでの同じWebサーバーへの接続は、個別にカウントされます。Webサーバーのホスト名は、元のHTTP要求のURLで指定されたとおりに識別されます。したがって、ドメイン名を持つ完全修飾されたホスト名は、ドメイン名のないホスト名とは別にカウントされます。

このプロシージャがコールされたときにパラメータでNULL値を使用すると、パッケージでクローズする永続的接続を決定したときに、コール元がその値を無視することを意味します。 特定の永続的接続をクローズする場合に永続的接続でNULLに設定されているパラメータの値のみをNULLに設定するには、CLOSE_PERSISTENT_CONNプロシージャを使用して、特定の永続的接続をクローズします。


END_REQUESTプロシージャ

このプロシージャは、HTTP要求を終了します。要求の完了および応答の待機を行わずにHTTP要求を終了するために、プログラムでこのプロシージャをコールできます。または、プログラムは要求の開始、応答の待機、応答のクローズという通常の順序を経て要求を終了することもできます。ネットワーク接続は常にクローズされ、再利用されることはありません。

構文

UTL_HTTP.END_REQUEST (
   r  IN OUT NOCOPY req);

パラメータ

表207-20 END_REQUESTプロシージャのパラメータ

パラメータ 説明

r

HTTP要求。



END_RESPONSEプロシージャ

このプロシージャは、HTTP応答を終了します。HTTP要求および応答を完了します。この要求でHTTP 1.1の永続的接続を使用している場合を除き、ネットワーク接続もクローズされます。

構文

UTL_HTTP.END_RESPONSE (
   r  IN OUT NOCOPY resp);

パラメータ

表207-21 END_RESPONSEプロシージャのパラメータ

パラメータ 説明

r

HTTP応答。



GET_AUTHENTICATIONプロシージャ

このプロシージャは、Webサーバーが受け付ける要求に必要とされるHTTP認証情報をHTTP応答ヘッダーの指示に従って取り出します。

構文

UTL_HTTP.GET_AUTHENTICATION(
   r          IN OUT NOCOPY resp,
   scheme     OUT VARCHAR2,
   realm      OUT VARCHAR2,
   for_proxy  IN BOOLEAN  DEFAULT FALSE);

パラメータ

表207-22 GET_AUTHENTICATIONプロシージャのパラメータ

パラメータ 説明

r

HTTP応答。

scheme

要求されたHTTP認証のスキーム。

realm

要求されたHTTP認証のレルム。

for_proxy

WebサーバーではなくHTTPプロキシ・サーバーにアクセスするために必要なHTTP認証情報を戻します。デフォルトはFALSEです。


使用上の注意

ドキュメントが保護されていないことをWebクライアントが認識していない場合、そのドキュメントを取り出すには少なくとも2つのHTTP要求が必要です。最初のHTTP要求で、Webクライアントは必要な認証情報を提供せずに要求を作成します。したがって、この要求は拒否されます。 Webクライアントは、GET_AUTHENTICATIONをコールすることにより、認証対象となる要求に必要な認証情報を判別します。 Webクライアントは2回目の要求を行い、SET_AUTHORIZATIONを使用して必要な認証情報を提供します。Webサーバーが認証情報を検証できれば、要求は正常に処理され、要求したドキュメントが戻されます。要求を行う前に、認証情報が必要であることをWebクライアントが認識している場合は、最初の要求で必要な認証情報を提供できます。これにより、余分な要求を行わずに済みます。


GET_BODY_CHARSETプロシージャ

このプロシージャは、将来のHTTP要求すべての本体におけるデフォルトのキャラクタ・セットを取り出します。

構文

UTL_HTTP.GET_BODY_CHARSET (
   charset  OUT NOCOPY VARCHAR2);

パラメータ

表207-23 GET_BODY_CHARSETプロシージャのパラメータ

パラメータ 説明

charset

将来のHTTP要求すべての本体におけるデフォルトのキャラクタ・セット。



GET_COOKIE_COUNTファンクション

このファンクションは、すべてのWebサーバーにより設定されたUTL_HTTPパッケージが現在保持するCookieの数を戻します。

構文

UTL_HTTP.GET_COOKIE_COUNT
RETURN PLS_INTEGER;

GET_COOKIE_SUPPORTプロシージャ

このプロシージャは、現在のCookieサポート設定を取り出します。

構文

UTL_HTTP.GET_COOKIE_SUPPORT (
   enable                OUT BOOLEAN,
   max_cookies           OUT PLS_INTEGER,
   max_cookies_per_site  OUT PLS_INTEGER);

パラメータ

表207-24 GET_COOKIE SUPPORTプロシージャのパラメータ

パラメータ 説明

enable

将来のHTTP要求がHTTP Cookieをサポートするかどうかを設定します(TRUEの場合はサポートし、FALSEの場合はサポートしません)。

max_cookies

現在のデータベース・ユーザー・セッションで保持されるCookieの最大合計数を示します。

max_cookies_per_site

現行のセッションで各Webサイトについて保持されるCookieの最大合計数を示します。



GET_COOKIESファンクション

このファンクションは、すべてのWebサーバーにより設定されたUTL_HTTP パッケージが現在保持するすべてのCookieを戻します。

構文

UTL_HTTP.GET_COOKIES (
   cookies  IN OUT NOCOPY cookie_table);

パラメータ

表207-25 GET_COOKIESファンクションのパラメータ

パラメータ 説明

cookies

戻されるCookie。



GET_DETAILED_EXCP_SUPPORTプロシージャ

このプロシージャは、UTL_HTTPパッケージが詳細な例外を呼び出すかどうかをチェックします。

構文

UTL_HTTP.GET_DETAILED_EXCP_SUPPORT (
   enable  OUT BOOLEAN);

パラメータ

表207-26 GET_DETAILED_EXCP_SUPPORTプロシージャのパラメータ

パラメータ 説明

enable

UTL_HTTPに詳細な例外を発生させる場合はTRUE、そうでない場合はFALSEに設定します。



GET_DETAILED_SQLCODEファンクション

このファンクションは、最後に発生した例外の詳細なSQLCODEを取り出します。

構文

UTL_HTTP.GET_DETAILED_SQLCODE
RETURN PLS_INTEGER;

GET_DETAILED_SQLERRMファンクション

このファンクションは、最後に発生した例外の詳細なSQLERRMを取り出します。

構文

UTL_HTTP.GET_DETAILED_SQLERRM
RETURN VARCHAR2;

GET_FOLLOW_REDIRECTプロシージャ

このプロシージャは、現行のセッションでのfollow_redirect設定を取り出します。

構文

UTL_HTTP.GET_FOLLOW_REDIRECT (
   max_redirects  OUT PLS_INTEGER);

パラメータ

表207-27 GET_FOLLOW_REDIRECTプロシージャのパラメータ

パラメータ 説明

max_redirects

将来のHTTP要求すべてに対するリダイレクトの最大回数。



GET_HEADERプロシージャ

このプロシージャは、応答で戻されたn回目のHTTP応答ヘッダーの名前および値を戻します。

構文

UTL_HTTP.GET_HEADER (
   r      IN OUT NOCOPY resp,
   n      IN PLS_INTEGER,
   name   OUT NOCOPY VARCHAR2,
   value  OUT NOCOPY VARCHAR2);

パラメータ

表207-28 GET_HEADERプロシージャのパラメータ

パラメータ 説明

r

HTTP応答。

n

n番目に戻されるヘッダー。

name

HTTP応答ヘッダーの名前。

value

HTTP応答ヘッダーの値。


使用上の注意

リモートWebサーバーから戻された応答本体がchunked transfer encoding形式でエンコードされている場合、応答本体の末尾で戻される追跡ヘッダーが応答に追加され、応答ヘッダーのカウントが更新されます。応答本体の末尾に到達した後、応答を終了する前に追加ヘッダーを取り出すことができます。


GET_HEADER_BY_NAMEプロシージャ

このプロシージャは、特定のヘッダー名を持つ応答に戻されたHTTP応答ヘッダーの値を戻します。

構文

UTL_HTTP.GET_HEADER_BY_NAME(
   r      IN OUT NOCOPY resp,
   name   IN VARCHAR2,
   value  OUT NOCOPY VARCHAR2,
   n      IN PLS_INTEGER DEFAULT 1);

パラメータ

表207-29 GET_HEADER_BY_NAMEプロシージャのパラメータ

パラメータ 説明

r

HTTP応答。

name

値が戻されるHTTP応答ヘッダーの名前。

value

HTTP応答ヘッダーの値。

n

戻すように指定した名前によりn番目に発生するHTTP応答ヘッダー。デフォルトは1です。


使用上の注意

リモートWebサーバーから戻された応答本体がchunked transfer encoding形式でエンコードされている場合、応答本体の末尾で戻される追跡ヘッダーが応答に追加され、応答ヘッダーのカウントが更新されます。応答本体の末尾に到達した後、応答を終了する前に追加ヘッダーを取り出すことができます。


GET_HEADER_COUNTファンクション

このファンクションは、応答で戻されたHTTP応答ヘッダーの数を戻します。

構文

UTL_HTTP.GET_HEADER_COUNT (
   r  IN OUT NOCOPY resp)
RETURN PLS_INTEGER;

パラメータ

表207-30 GET_HEADER_COUNTファンクションのパラメータ

パラメータ 説明

r

HTTP応答。


使用上の注意

リモートWebサーバーから戻された応答本体がchunked transfer encoding形式でエンコードされている場合、応答本体の末尾で戻される追跡ヘッダーが応答に追加され、応答ヘッダーのカウントが更新されます。応答本体の末尾に到達した後、応答を終了する前に追加ヘッダーを取り出すことができます。


GET_PERSISTENT_CONN_COUNTファンクション

このファンクションは、UTL_HTTPパッケージにより現在永続的に保持されているネットワーク接続数をWebサーバーに戻します。

構文

UTL_HTTP.GET_PERSISTENT_CONN_COUNT
RETURN PLS_INTEGER;

使用上の注意

異なるTCP/IPポートでの同じWebサーバーへの接続は、個別にカウントされます。Webサーバーのホスト名は、元のHTTP要求のURLで指定されたとおりに識別されます。したがって、ドメイン名を持つ完全修飾されたホスト名は、ドメイン名のないホスト名とは別にカウントされます。


GET_PERSISTENT_CONN_SUPPORTプロシージャ

このプロシージャは次の項目をチェックします。

構文

UTL_HTTP.GET_PERSISTENT_CONN_SUPPORT (
   enable     OUT BOOLEAN,
   max_conns  OUT PLS_INTEGER);

パラメータ

表207-31 GET_PERSISTENT_CONN_SUPPORTプロシージャのパラメータ

パラメータ 説明

enable

永続的接続サポートが有効にされている場合はTRUE、そうでない場合はFALSEです。

max_conns

現行のセッションで保持される永続的接続の最大数。



GET_PERSISTENT_CONNSプロシージャ

このプロシージャは、UTL_HTTPパッケージにより現在永続的に保持されているネットワーク接続をすべてWebサーバーに戻します。

構文

UTL_HTTP.get_persistent_conns (
   connections  IN OUT NOCOPY connection_table);

パラメータ

表207-32 GET_PERSISTENT_CONNSプロシージャのパラメータ

パラメータ 説明

connections

永続的に保持されているネットワーク接続。


使用上の注意

異なるTCP/IPポートでの同じWebサーバーへの接続は、個別にカウントされます。Webサーバーのホスト名は、元のHTTP要求のURLで指定されたとおりに識別されます。したがって、ドメイン名を持つ完全修飾されたホスト名は、ドメイン名のないホスト名とは別にカウントされます。


GET_PROXYプロシージャ

このプロシージャは、現在のプロキシ設定を取り出します。

構文

UTL_HTTP.GET_PROXY (
   proxy             OUT NOCOPY VARCHAR2,
   no_proxy_domains  OUT NOCOPY VARCHAR2);

パラメータ

表207-33 GET_PROXYプロシージャのパラメータ

パラメータ 説明

proxy

UTL_HTTPパッケージにより現在使用されているプロキシ(ホストおよびオプションのポート番号)。

no_proxy_domains

プロキシをすべての要求に対して使用しないホストおよびドメインのリスト。



GET_RESPONSEファンクション

このファンクションは、HTTP応答を読み込みます。ファンクションが戻ると、ステータス行およびHTTP応答ヘッダーが読み込まれて処理されます。ステータス・コード、理由、HTTPプロトコルのバージョンは応答レコードに格納されます。このファンクションは、HTTPヘッダー・セクションを完了します。

構文

UTL_HTTP.GET_RESPONSE (
   r  IN OUT NOCOPY req)
RETURN resp;

パラメータ

表207-34 GET_RESPONSEファンクションのパラメータ

パラメータ 説明

r

HTTP応答。



GET_RESPONSE_ERROR_CHECKプロシージャ

このプロシージャは、応答エラー・チェックが設定されているかどうかをチェックします。

構文

UTL_HTTP.GET_RESPONSE_ERROR_CHECK (
   enable  OUT BOOLEAN);

パラメータ

表207-35 GET_RESPONSE_ERROR_CHECKプロシージャのパラメータ

パラメータ 説明

enable

応答エラー・チェックが設定されている場合はTRUE、そうでない場合はFALSEです。



GET_TRANSFER_TIMEOUTプロシージャ

このプロシージャは、将来のHTTP要求に対するデフォルトのタイムアウト値を取り出します。

構文

UTL_HTTP.GET_TRANSFER_TIMEOUT (
   timeout  OUT PLS_INTEGER);

パラメータ

表207-36 GET_TRANSFER_TIMEOUTプロシージャのパラメータ

パラメータ 説明

timeout

ネットワーク転送のタイムアウト値(秒)。



READ_LINEプロシージャ

このプロシージャは、HTTP応答本体を行末までテキスト形式で読み込み、コール元が提供したバッファに出力を戻します。 行末は、UTL_TCPのread_lineファンクションで定義されます。HTTP応答本体の終端に到達した場合、end_of_body例外が発生します。テキスト・データは、応答本体のキャラクタ・セットからデータベース・キャラクタ・セットに自動的に変換されます。

構文

UTL_HTTP.READ_LINE(
   r            IN OUT NOCOPY resp,
   data         OUT NOCOPY  VARCHAR2 CHARACTER SET ANY_CS,
   remove_crlf  IN  BOOLEAN DEFAULT FALSE);

パラメータ

表207-37 READ_LINEプロシージャのパラメータ

パラメータ 説明

r

HTTP応答。

data

テキスト形式のHTTP応答本体。

remove_crlf

TRUEの場合、改行文字が削除されます。


使用上の注意

UTL_HTTPパッケージは、HTTP 1.1 chunked transfer-encodingをサポートしています。応答ヘッダーで指定されたchunked transfer-encoding形式で応答本体が戻された場合、パッケージは自動的にチャンクをデコードし、チャンクを解除した形式の応答本体を戻します。

転送のタイムアウトがこの応答の要求で設定されている場合、read_lineは、タイムアウトが発生するまでの間、各データ・パケットが読み込まれるまで待機します。タイムアウトが発生すると、このプロシージャは読込みを停止し、正常に読み込んだデータをすべて戻します。正常に読み込まれたデータがない場合は、transfer_timeout例外が発生します。例外を処理し、読込み操作を後で再試行できます。

マルチバイト・キャラクタの一部が応答本体の終わりで検出された場合、read_lineは読込みを中止し、正常かつ完全に読み込まれたマルチバイト・キャラクタをすべて戻します。正常に読み込まれた文字がない場合は、partial_multibyte_char例外が発生します。read_rawプロシージャを使用して例外を処理し、部分的なマルチバイト・キャラクタのバイトをバイナリとして読み込むことができます。マルチバイト・キャラクタの一部が渡されていない状態でタイムアウトが発生し、応答本体の途中でマルチバイト・キャラクタの残りの部分が表示された場合は、transfer_timeout例外が発生します。例外を処理し、読込み操作を後で再試行できます。

Content-Type応答ヘッダーによって指定されている応答本体のキャラクタ・セットが不明であるか、Oracleではサポートされていない場合に、応答本体をテキストとして読み込もうとすると、「ORA-01482: 指定されたキャラクタ・セットはサポートされていません。」という例外が発生します。応答本体は、READ_RAWプロシージャを使用してバイナリとして読み込むか、SET_BODY_CHARSETプロシージャを使用して、その応答本体のキャラクタ・セットを明示的に設定することで再度テキストとして読み込むことができます。


READ_RAWプロシージャ

このプロシージャは、HTTP応答本体をバイナリ形式で読み込み、コール元が提供したバッファに出力を戻します。HTTP応答本体の終端に到達した場合、end_of_body例外が発生します。

構文

UTL_HTTP.READ_RAW(
   r     IN OUT NOCOPY resp,
   data  OUT NOCOPY RAW,
   len   IN PLS_INTEGER DEFAULT NULL);

パラメータ

表207-38 READ_RAWプロシージャのパラメータ

パラメータ 説明

r

HTTP応答。

data

バイナリ形式のHTTP応答本体。

len

読み込むデータのバイト数。lenNULLの場合、このプロシージャは、dataに割り当てられたバッファを最大限に活用して入力を読み込みます。 HTTP応答本体の末尾に到達するまで、またはtransfer_timeoutの時間量が経過するまでに使用できるデータが少ない場合は、実際に戻されるデータ量が指定した量より減る可能性があります。デフォルトはNULLです。


使用上の注意

UTL_HTTPパッケージは、HTTP 1.1 chunked transfer-encodingをサポートしています。応答ヘッダーで指定されたchunked transfer-encoding形式で応答本体が戻された場合、パッケージは自動的にチャンクをデコードし、チャンクを解除した形式の応答本体を戻します。

転送のタイムアウトがこの応答の要求で設定されている場合、read_rawは、タイムアウトが発生するまでの間、各データ・パケットが読み込まれるまで待機します。 タイムアウトが発生すると、read_rawは読込みを停止し、正常に読み込んだデータをすべて戻します。正常に読み込まれたデータがない場合は、transfer_timeout例外が発生します。例外を処理し、読込み操作を後で再試行できます。


READ_TEXTプロシージャ

このプロシージャは、HTTP応答本体をテキスト形式で読み込み、コール元が提供したバッファに出力を戻します。HTTP応答本体の終端に到達した場合、end_of_body例外が発生します。テキスト・データは、応答本体のキャラクタ・セットからデータベース・キャラクタ・セットに自動的に変換されます。

構文

UTL_HTTP.READ_TEXT(
   r     IN OUT NOCOPY resp,
   data  OUT NOCOPY VARCHAR2 CHARACTER SET ANY_CS,
   len   IN PLS_INTEGER DEFAULT NULL);

パラメータ

表207-39 READ_TEXTプロシージャのパラメータ

パラメータ 説明

r

HTTP応答。

data

テキスト形式のHTTP応答本体。

len

読み込まれるデータの最大文字数。lenがNULLの場合、このプロシージャは、dataに割り当てられたバッファを最大限に活用して入力を読み込みます。 HTTP応答本体の末尾に到達するまで、またはtransfer_timeoutの時間量が経過するまでに使用できるデータが少ない場合は、実際に戻されるデータ量が指定した量より減る可能性があります。デフォルトはNULLです。


使用上の注意

UTL_HTTPパッケージは、HTTP 1.1 chunked transfer-encodingをサポートしています。応答ヘッダーで指定されたchunked transfer-encoding形式で応答本体が戻された場合、パッケージは自動的にチャンクをデコードし、チャンクを解除した形式の応答本体を戻します。

転送のタイムアウトがこの応答の要求で設定されている場合、read_textは、タイムアウトが発生するまでの間、各データ・パケットが読み込まれるまで待機します。タイムアウトが発生すると、このプロシージャは読込みを停止し、正常に読み込んだデータをすべて戻します。正常に読み込まれたデータがない場合は、transfer_timeout例外が発生します。例外を処理し、読込み操作を後で再試行できます。

マルチバイト・キャラクタの一部が応答本体の終わりで検出された場合、read_textは読込みを中止し、正常かつ完全に読み込まれたマルチバイト・キャラクタをすべて戻します。正常に読み込まれた文字がない場合は、partial_multibyte_char例外が発生します。read_rawプロシージャを使用して例外を処理し、部分的なマルチバイト・キャラクタのバイトをバイナリとして読み込むことができます。マルチバイト・キャラクタの一部が渡されていない状態でタイムアウトが発生し、応答本体の途中でマルチバイト・キャラクタの残りの部分が表示された場合は、transfer_timeout例外が発生します。例外を処理し、読込み操作を後で再試行できます。

Content-Type応答ヘッダーによって指定されている応答本体のキャラクタ・セットが不明であるか、Oracleでサポートされていない場合に、応答本体をテキストとして読み込もうとすると、「ORA-01482: 指定されたキャラクタ・セットはサポートされていません。」という例外が発生します。応答本体は、READ_RAWプロシージャを使用してバイナリとして読み込むか、SET_BODY_CHARSETプロシージャを使用して、その応答本体のキャラクタ・セットを明示的に設定することで再度テキストとして読み込むことができます。


REQUESTファンクション

このファンクションは、指定したURLから取り出したデータの最初の2000バイトまでを戻します。このファンクションは、SQL問合せで直接使用できます。URLには、サーバーへの要求を認証するために必要なユーザー名とパスワードが含まれている場合があります。書式は次のとおりです。

scheme://[user[:password]@]host[:port]/[...]

プロキシ文字列の中で指定するプロキシのユーザー名またはパスワード、あるいはその両方を定義できます。書式は次のとおりです。

[http://][user[:password]@]host[:port][/]

構文

UTL_HTTP.REQUEST (
   url              IN VARCHAR2,
   proxy            IN VARCHAR2 DEFAULT NULL,
   wallet_path      IN VARCHAR2 DEFAULT NULL,
   wallet_password  IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2;

プラグマ

pragma restrict_references (request, wnds, rnds, wnps, rnps);

パラメータ

表207-40 REQUESTファンクションのパラメータ

パラメータ 説明

url

URL。

proxy

(オプション)HTTP要求時に使用するプロキシ・サーバーを指定します。プロキシ設定の完全な形式については、SET_PROXYを参照してください。

wallet_path

(オプション)クライアント側のWalletを指定します。クライアント側のWalletには、HTTPS要求に必要な信頼されている認証局のリストが含まれています。 wallet_pathの形式は、たとえば、PCではfile:c:\WINNT\Profiles\<username>\WALLETS、UNIXではfile:/home/<username>/walletsとなります。

UTL_HTTPパッケージがOracle Databaseサーバーで実行される場合は、データベース・サーバーからWalletにアクセスします。したがって、Walletのパスにデータベース・サーバーからアクセスできる必要があります。 Oracle Walletの設定方法については、SET_WALLETプロシージャを参照してください。HTTPS以外の要求の場合は、Oracle Walletは必要ありません。

wallet_password

(オプション)Walletのオープンに必要なパスワードを指定します。


戻り値

戻りタイプは長さ2000以下の文字列で、引数URLへのHTTP要求から戻されたHTML結果から最初の2000バイトまでが含まれます。

例外

INIT_FAILED
REQUEST_FAILED

使用上の注意

このファンクションに引数として渡されたURLでは、URL仕様RFC 2396に従った不正文字(空白など)の検証は行われません。コール元は、UTL_URLパッケージを使用して、このような文字をエスケープする必要があります。URLで有効な文字のリストについては、パッケージのコメントを参照してください。URLはUS-ASCII文字のみで構成する必要があるので注意してください。それ以外の文字のURLでの使用は避けてください。

Oracle Walletの使用方法については、SET_WALLETファンクションのマニュアルを参照してください。Oracle Walletは、HTTPS Webサーバーへのアクセスに必要です。

応答エラー・チェックがオンにされないかぎり、Webサーバーから4xxまたは5xxの応答を受信してもこのファンクションが例外を呼び出すことはありません。そのかわりに、Webサーバーからフォーマット・エラー・メッセージが戻されます。

<HTML>
<HEAD>
<TITLE>Error Message</TITLE>
</HEAD>
<BODY>
<H1>Fatal Error 500</H1>
Can't Access Document:  http://home.nothing.comm.
<P>
<B>Reason:</B> Can't locate remote host:  home.nothing.comm.
<P>
<P><HR>
<ADDRESS><A HREF="http://www.w3.org">
CERN-HTTPD3.0A</A></ADDRESS>
</BODY>
</HTML>

SQLPLUS> SELECT UTL_HTTP.REQUEST('http://www.my-company.com/') FROM DUAL;
UTL_HTTP.REQUEST('HTTP://WWW.MY-COMPANY.COM/')
<html>
<head><title>My Company Home Page</title>
<!--changed Jan. 16, 19
1 row selected.

firewallの内側にいる場合は、proxyパラメータを含めます。たとえば、Oracle firewall内には、www-proxy.my-company.comという名前のプロキシ・サーバーがある場合があります。

SQLPLUS> SELECT
UTL_HTTP.REQUEST('http://www.my-company.com', 'www-proxy.us.my-company.com') FROM DUAL;

REQUEST_PIECESファンクション

このファンクションは、指定したURLから取り出したデータについて、2000バイト・ピースのPL/SQL表を戻します。プロキシ文字列の中で指定するプロキシのユーザー名またはパスワード、あるいはその両方を定義できます。書式は次のとおりです。

[http://][user[:password]@]host[:port][/]

構文

TYPE html_pieces IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;

UTL_HTTP.REQUEST_PIECES (
   url             IN VARCHAR2,
   max_pieces      IN NATURAL DEFAULT 32767,
   proxy           IN VARCHAR2 DEFAULT NULL,
   wallet_path     IN VARCHAR2 DEFAULT NULL,
   wallet_password IN VARCHAR2 DEFAULT NULL)
RETURN html_pieces;

プラグマ

PRAGMA RESTRICT_REFERENCES (request_pieces, WNDS, RNDS, WNPS, RNPS);

パラメータ

表207-41 REQUEST_PIECESファンクションのパラメータ

パラメータ 説明

url

URL。

max_pieces

(オプション)REQUEST_PIECESが戻すピースの最大数(長さは各2000文字、最後のピースはこれより短くなる場合があります)。指定する場合、引数は正の整数を指定します。

proxy

(オプション)HTTP要求時に使用するプロキシ・サーバーを指定します。プロキシ設定の完全な形式については、SET_PROXYを参照してください。

wallet_path

(オプション)クライアント側のWalletを指定します。クライアント側のWalletには、HTTPS要求に必要な信頼されている認証局のリストが含まれています。

wallet_pathの形式は、たとえば、PCではfile:c:\WINNT\Profiles\<username>\WALLETS、UNIXではfile:/home/<username>/walletsとなります。UTL_HTTPパッケージがOracle Databaseサーバーで実行される場合は、データベース・サーバーからWalletにアクセスします。したがって、Walletのパスにデータベース・サーバーからアクセスできる必要があります。

Oracle Walletの設定方法については、SET_WALLETプロシージャを参照してください。HTTPS以外の要求の場合は、Oracle Walletは必要ありません。

wallet_password

(オプション)Walletのオープンに必要なパスワードを指定します。


戻り値

REQUEST_PIECESは、UTL_HTTP.HTML_PIECESタイプのPL/SQL表を戻します。 PL/SQL表の各要素は、最大長2,000の文字列です。REQUEST_PIECESにより戻されるPL/SQL表の要素は、そのURLに対してHTTP要求から取得した連続データです。

例外

INIT_FAILED
REQUEST_FAILED

使用上の注意

このファンクションに引数として渡されたURLでは、URL仕様RFC 2396に従った不正文字(空白など)の検証は行われません。コール元は、UTL_URLパッケージを使用して、このような文字をエスケープする必要があります。URLで有効な文字のリストについては、パッケージのコメントを参照してください。URLはUS-ASCII文字のみで構成する必要があるので注意してください。それ以外の文字のURLでの使用は避けてください。

このファンクションにより戻されるPL/SQL表の各エントリ(情報の断片)は、容量を完全に満たさない場合があります。このファンクションでは、前の断片が完全に満たされる前に、次の断片にデータが到着し始めます。

Oracle Walletの使用方法については、SET_WALLETファンクションのマニュアルを参照してください。Oracle Walletは、HTTPS Webサーバーへのアクセスに必要です。

応答エラー・チェックがオンにされないかぎり、Webサーバーから4xxまたは5xxの応答を受信してもこのファンクションが例外を呼び出すことはありません。そのかわりに、Webサーバーからフォーマット・エラー・メッセージが戻されます。

<HTML>
<HEAD>
<TITLE>Error Message</TITLE>
</HEAD>
<BODY>
<H1>Fatal Error 500</H1>
Can't Access Document:  http://home.nothing.comm.
<P>
<B>Reason:</B> Can't locate remote host:  home.nothing.comm.
<P>
<P><HR>
<ADDRESS><A HREF="http://www.w3.org">
CERN-HTTPD3.0A</A></ADDRESS>
</BODY>
</HTML>

SET SERVEROUTPUT ON

DECLARE
   x   UTL_HTTP.HTML_PIECES;
   len PLS_INTEGER;
BEGIN
   x := UTL_HTTP.REQUEST_PIECES('http://www.oracle.com/', 100);
   DBMS_OUTPUT.PUT_LINE(x.count || ' pieces were retrieved.');
   DBMS_OUTPUT.PUT_LINE('with total length ');
   IF x.count < 1 THEN
      DBMS_OUTPUT.PUT_LINE('0');
  ELSE
   len := 0;
   FOR i in 1..x.count LOOP
      len := len + length(x(i));
   END LOOP;
   DBMS_OUTPUT.PUT_LINE(i);
  END IF;
END;
/
-- Output
Statement processed.
4 pieces were retrieved.
with total length
7687

SET_AUTHENTICATIONプロシージャ

このプロシージャは、HTTP要求ヘッダーのHTTP認証情報を設定します。Webサーバーが要求を認証するにはこの情報が必要です。

構文

UTL_HTTP.SET_AUTHENTICATION(
   r         IN OUT NOCOPY req,
   username  IN VARCHAR2,
   password  IN VARCHAR2,
   scheme    IN VARCHAR2 DEFAULT 'Basic',
   for_proxy IN BOOLEAN  DEFAULT FALSE);

パラメータ

表207-42 SET_AUTHENTICATIONプロシージャのパラメータ

パラメータ 説明

r

HTTP要求。

username

HTTP認証のユーザー名。

password

HTTP認証のパスワード。

scheme

HTTP認証方式。デフォルトのBASICは、HTTP基本認証方式を示します。

for_proxy

HTTP認証情報がWebサーバーではなくHTTPプロキシ・サーバーにアクセスするためのものであるかどうかを識別します。デフォルトはFALSEです。


使用上の注意

HTTP基本認証方式のみがサポートされています。


SET_BODY_CHARSETプロシージャ

このプロシージャはオーバーロードされています。各機能の説明は構文宣言の箇所に併記してあります。

構文

メディア・タイプがtextで、キャラクタ・セットがContent-Typeヘッダーで指定されていない場合、将来のすべてのHTTP要求本体におけるデフォルトのキャラクタ・セットを設定します。要求または応答のメディア・タイプがtextで、キャラクタ・セット情報がContent-Typeヘッダーに含まれていない場合は、HTTPプロトコルの標準仕様に従い、要求または応答の本体キャラクタ・セットはデフォルトのISO-8859-1になります。要求に対して作成された応答は、現行のセッションの本体キャラクタ・セットではなく、要求のデフォルトの本体キャラクタ・セットを継承します。 データベース・ユーザー・セッションでは、デフォルトの本体キャラクタ・セットはISO-8859-1です。デフォルトの本体キャラクタ・セットの設定は将来の要求に対してのみ影響を与え、既存の要求に影響はありません。 要求が作成された後、要求を操作するその他のSET_BODY_CHARSETプロシージャを使用して、本体キャラクタ・セットを変更できます。

UTL_HTTP.SET_BODY_CHARSET (
   charset  IN VARCHAR2 DEFAULT NULL);

メディア・タイプがtextで、キャラクタ・セットがContent-Typeヘッダーで指定されていない場合は、要求本体のデフォルトのキャラクタ・セットを設定します。要求または応答のメディア・タイプがtextで、キャラクタ・セット情報がContent-Typeヘッダーに含まれていない場合は、HTTPプロトコルの標準仕様に従い、要求または応答の本体キャラクタ・セットはデフォルトのISO-8859-1になります。このプロシージャを使用して、要求がセッションのデフォルト設定を継承するデフォルトの本体キャラクタ・セットを変更します。

UTL_HTTP.SET_BODY_CHARSET(
   r        IN OUT NOCOPY req,
   charset  IN VARCHAR2 DEFAULT NULL);

メディア・タイプがtextで、キャラクタ・セットがContent-Typeヘッダーで指定されていない場合は、応答本体のキャラクタ・セットを設定します。HTTPプロトコルの標準仕様ごとに、要求または応答のメディア・タイプがtextで、キャラクタ・セット情報がContent-Typeヘッダーに含まれていない場合は、要求または応答の本体キャラクタ・セットはデフォルトのISO-8859-1になります。このプロシージャを使用して、応答が要求から継承するデフォルトの本体キャラクタ・セットを変更します。

UTL_HTTP.SET_BODY_CHARSET(
   r        IN OUT NOCOPY resp,
   charset  IN VARCHAR2 DEFAULT NULL);

パラメータ

表207-43 SET_BODY_CHARSETプロシージャのパラメータ

パラメータ 説明

r

HTTP応答。

charset

応答本体のデフォルトのキャラクタ・セット。キャラクタ・セットは、OracleまたはInternet Assigned Numbers Authority(IANA)のネーミング規則で命名できます。charsetNULLの場合、データベース・キャラクタ・セットと想定されます。



SET_COOKIE_SUPPORTプロシージャ

このプロシージャはオーバーロードされています。各機能の説明は構文宣言の箇所に併記してあります。

構文

要求のHTTP Cookieのサポートを有効または無効にします。このプロシージャを使用して、要求がセッションのデフォルト設定を継承するCookieのサポート設定を変更します。

UTL_HTTP.SET_COOKIE_SUPPORT(
   r       IN OUT NOCOPY REQ,
   enable  IN BOOLEAN DEFAULT TRUE);

将来のHTTP要求がHTTP Cookieをサポートするかどうかを設定し、現在のデータベース・ユーザー・セッションで保持されるCookieの最大数を設定します。

UTL_HTTP.SET_COOKIE_SUPPORT (
   enable       IN BOOLEAN,
   max_cookies  IN PLS_INTEGER DEFAULT 300,
   max_cookies_per_site  IN PLS_INTEGER DEFAULT 20);

パラメータ

表207-44 SET_COOKIE_SUPPORTプロシージャのパラメータ

パラメータ 説明

r

HTTP要求。

enable

HTTP Cookieサポートを有効にする場合はTRUE、無効に設定する場合はFALSEに設定します。

max_cookies

現行のセッションで保持されるCookieの最大合計数を設定します。

max_cookies_per_site

現行のセッションでWebサイトごとに保持されるCookieの最大合計数を設定します。


使用上の注意

CookieがHTTP要求に対して有効である場合、現行のセッションで保存され、要求に適用可能なCookieはすべて、HTTP Cookieの仕様標準に基づき、その要求でWebサーバーに戻されます。Cookieサポートが要求に対して有効である場合は、要求に応答して設定されたCookieが現行のセッションに保存され、後続の要求でWebサーバーに戻されます。CookieサポートがHTTP要求に対して無効である場合は、その要求でWebサーバーにCookieは戻されず、要求に応答して設定されたCookieは現行のセッションで保存されません。ただし、Set-Cookie HTTPヘッダーは応答からの取出しが可能です。

データベース・ユーザー・セッションでは、すべてのHTTP要求に対してCookieのサポートがデフォルトで有効にされています。Cookieのサポートのデフォルト設定(有効または無効)が影響するのは将来の要求に対してのみであり、既存の要求には影響ありません。 要求が作成された後、要求を操作するその他のSET_COOKIE_SUPPORTプロシージャを使用して、Cookieのサポートの設定を変更できます。

現行のセッションにデフォルトで保存されるCookieの最大数は、各サイトにつき20、合計で300です。

Cookieの最大合計数または各Webサイトに対するCookieの最大数を減少させる場合は、減少後の最大数まで最も古いCookieからパージされます。現行のセッションで保存されたHTTP Cookieはデータベース・セッションの期間のみ存続します。永続的に格納されるCookieはありません。Cookieのサポートを無効にすると、現行のセッションで保存されたCookieはクリアされません。

GET_COOKIESおよびADD_COOKIESを使用したCookieの取出し、保存およびリストアを行う方法については、「例」を参照してください。


SET_DETAILED_EXCP_SUPPORTプロシージャ

このプロシージャは、UTL_HTTPパッケージが詳細な例外を呼び出すように設定します。 デフォルトでは、HTTP要求が失敗すると、UTL_HTTPによりrequest_failed例外が発生します。 エラーの詳細情報を参照するには、GET_DETAILED_SQLCODEおよびGET_DETAILED_SQLEERMを使用します。

構文

UTL_HTTP.SET_DETAILED_EXCP_SUPPORT (
   enable  IN BOOLEAN DEFAULT FALSE);

パラメータ

表207-45 SET_DETAILED_EXCP_SUPPORTプロシージャのパラメータ

パラメータ 説明

enable

UTL_HTTPに詳細な例外を直接発生させるように指示する場合はTRUE、そうでない場合はFALSEに設定します。



SET_FOLLOW_REDIRECTプロシージャ

このプロシージャは、GET_RESPONSEファンクションで現在または将来指定される要求に対するHTTP応答において、HTTPリダイレクトの指示にUTL_HTTPが従う最大回数を設定します。

構文

このプロシージャを使用して、リダイレクトの最大回数を設定します。

UTL_HTTP.SET_FOLLOW_REDIRECT (
   max_redirects  IN PLS_INTEGER DEFAULT 3);

このプロシージャを使用して、要求がセッションのデフォルト設定を継承するリダイレクトの最大回数を変更します。

UTL_HTTP.SET_FOLLOW_REDIRECT(
   r              IN OUT NOCOPY req,
   max_redirects  IN PLS_INTEGER DEFAULT 3);

パラメータ

表207-46 SET_FOLLOW_REDIRECTプロシージャのパラメータ

パラメータ 説明

r

HTTP要求。

max_redirects

リダイレクトの最大回数。リダイレクトを無効にするには0(ゼロ)に設定します。


使用上の注意

max_redirectsが正の値に設定されている場合、GET_RESPONSEファンクションは、HTTP応答のステータス・コード301、302および307(HTTP HEADメソッドおよびHTTP GETメソッドの場合)、303(すべてのHTTPメソッドの場合)に対してリダイレクトされたURLに自動的に従います。さらにHTTP要求(要求メソッドはステータス・コード303のHTTP GETに変更されます)が新しい場所で再試行されます。リダイレクトされない最後の場所に到達するか、エラーが発生するか、または無限のループを回避するために設定されたリダイレクトの最大回数に到達するまでリダイレクトが実行されます。REQレコードのURLおよびmethodフィールドは、最後にリダイレクトされたURLおよびそのURLへのアクセスに使用されたメソッドに更新されます。リダイレクトの最大回数を0(ゼロ)に設定し、自動リダイレクトを無効にします。

現行のセッションでは自動リダイレクトに従わないように設定していますが、個別にHTTP要求を指定してFOLLOW_REDIRECTファンクションのリダイレクト指示に従うように設定できます。その逆の設定も可能です。

データベース・ユーザー・セッションにおけるリダイレクトのデフォルト最大回数は3です。デフォルト値が影響を与えるのは将来の要求に対してのみであり、既存の要求に影響はありません。

リダイレクトを有効にするには、GET_RESPONSEの前にSET_FOLLOW_REDIRECTプロシージャをコールする必要があります。


SET_HEADERプロシージャ

このプロシージャは、HTTP要求ヘッダーを設定します。要求ヘッダーは、設定後ただちにWebサーバーに送信されます。

構文

UTL_HTTP.SET_HEADER (
   r      IN OUT NOCOPY req,
   name   IN VARCHAR2,
   value  IN VARCHAR2);

パラメータ

表207-47 SET_HEADERプロシージャのパラメータ

パラメータ 説明

r

HTTP要求。

name

HTTP要求ヘッダーの名前。

value

HTTP要求ヘッダーの値。


使用上の注意

HTTPプロトコルの標準では、複数のHTTPヘッダーに同じ名前を付けることができます。したがって、既存のヘッダーと同じ名前を付けても置換されません。

HTTP 1.1を使用して要求を作成する場合、UTL_HTTPによりホストのヘッダーが自動的に設定されます。

このプロシージャを使用してContent-Typeヘッダーを設定すると、UTL_HTTPはヘッダー値からキャラクタ・セット情報を探します。キャラクタ・セット情報が存在する場合は、要求本体のキャラクタ・セットとして設定されます。 SET_BODY_CHARSETプロシージャを使用すると、後でこの設定を変更できます。

Transfer-Encodingヘッダーにchunkedの値を設定すると、WRITE_TEXT、WRITE_LINEおよびWRITE_RAWプロシージャによって作成された要求本体が、UTL_HTTPによって自動的にエンコードされます。HTTP 1.1ベースのWebサーバーまたはCGIプログラムは、HTTP 1.1 chunked transfer-encoding形式でエンコードされた要求本体をサポートしていません。


SET_PERSISTENT_CONN_SUPPORTプロシージャ

このプロシージャは、要求のHTTP 1.1の永続的接続のサポートを有効または無効にします。

構文

UTL_HTTP.SET_PERSISTENT_CONN_SUPPORT(
   r       IN OUT NOCOPY req,
   enable  IN BOOLEAN DEFAULT FALSE);

パラメータ

表207-48 SET_PERSISTENT_CONN_SUPPORTプロシージャのパラメータ

パラメータ 説明

r

HTTP要求。

enable

ネットワークを永続的に接続するにはTRUEに設定します。そうでない場合はFALSEに設定します。


使用上の注意

永続的接続がHTTP要求に対して有効である場合、要求が完了した後、パッケージはWebサーバーまたはプロキシ・サーバーへのネットワーク接続をオープンしたまま保持し、同じサーバーへの後続の要求でHTTP 1.1プロトコルの各仕様を再利用します。永続的接続がサポートされている場合、ネットワーク接続の待機時間が回避されるため、後続のHTTP要求は高速に処理されます。永続的接続サポートがHTTP要求に対して無効である場合、要求が完了すると、Connection: close HTTPヘッダーが常にHTTP要求に自動的に送信され、ネットワーク接続はクローズされます。この設定は、HTTP 1.0プロトコルに準拠したHTTP要求には影響ありません。これは、要求が完了した後、ネットワーク接続が常にクローズされるためです。

要求を作成する際に、ターゲットWebサーバー(またはプロキシ・サーバー)が使用可能であれば、パッケージはこのターゲットとの既存の永続的接続を再利用しようとします。使用可能なサーバーがない場合、新しいネットワーク接続が開始されます。要求に対する永続的接続サポートの設定が影響するのは、要求が完了した後にネットワーク接続をクローズするかどうかということについてのみです。

このプロシージャを使用して、要求がセッションのデフォルト設定を継承する永続的接続のサポート設定を変更します。

UTL_HTTPで永続的接続を使用すると、同じサーバーから複数のWebページをフェッチする回数を軽減する一方で、データベース・サーバーのシステム・リソース(ネットワーク接続)が浪費されます。また、データベース・サーバーで多くのネットワーク接続がオープンされたままである場合、永続的接続を過度に使用すると、データベース・サーバーのスケーラビリティが低下します。ネットワーク接続は、後続の要求により即時使用される場合にのみオープンにし、不要な場合にはクローズしてください。通常、セッションではデフォルトの永続的接続サポートを無効にし、個々のHTTP要求で永続的接続を有効にします。詳細は、「例」を参照してください。

データベース・セッションにおける永続的接続の最大数のデフォルト値は0(ゼロ)です。永続的接続を実際に有効にするには、永続的接続の最大数を正の値に設定する必要があります。そうでない場合には、接続は永続的に保持されません。

HTTP要求でのSET_PERSISTENT_CONN_SUPPORTの使用

DECLARE
  TYPE vc2_table IS TABLE OF VARCHAR2(256) INDEX BY BINARY_INTEGER;
  paths VC2_TABLE;

UTL_HTTP.fetch_pages(paths IN vc2_table) AS
    url_prefix   VARCHAR2(256) := 'http://www.my-company.com/';
    req          UTL_HTTP.REQ;
    resp         UTL_HTTP.RESP;
    data  VARCHAR2(1024);
  BEGIN
    FOR i IN 1..paths.count LOOP
      req := UTL_HTTP.BEGIN_REQUEST(url_prefix || paths(i));
      -- Use persistent connection except for the last request
      IF (i < paths.count) THEN
        UTL_HTTP.SET_PERSISTENT_CONN_SUPPORT(req, TRUE);
      END IF;
      resp := UTL_HTTP.GET_RESPONSE(req);
      BEGIN
        LOOP
          UTL_HTTP.READ_TEXT(resp, data);
          -- do something with the data
        END LOOP;
      EXCEPTION
        WHEN UTL_HTTP.END_OF_BODY THEN
          NULL;
      END;
      UTL_HTTP.END_RESPONSE(resp);
    END LOOP;
  END;

BEGIN
  UTL_HTTP.SET_PERSISTENT_CONN_SUPPORT(FALSE, 1);
  paths(1) := '...';
  paths(2) := '...';
  ...
  fetch_pages(paths);
END;

SET_PROXYプロシージャ

このプロシージャは、HTTPプロトコルまたはその他のプロトコルの要求に使用するプロキシを設定します。no_proxy_domainsで指定されたドメインに属するホストへの要求は除外されます。no_proxy_domainsは、ドメインまたはホストをカンマ、セミコロンまたはスペースで区切ったリストです。HTTP要求は、宛先のHTTPサーバーのこれらのドメインまたはホストには、プロキシ・サーバーを経由せずに直接送信されます。

構文

UTL_HTTP.SET_PROXY (
   proxy             IN VARCHAR2,
   no_proxy_domains  IN VARCHAR2);

パラメータ

表207-49 SET_PROXYプロシージャのパラメータ

パラメータ 説明

proxy

UTL_HTTPパッケージにより使用されるプロキシ(ホストおよびオプションのポート番号)。

no_proxy_domains

プロキシをすべての要求に対して使用しないホストおよびドメインのリスト。


使用上の注意

プロキシには、プロキシ・サーバーがリスニングするオプションのTCP/IPポート番号を含めることができます。 構文は、[http://]host[:port][/]www-proxy.my-company.com:80など)です。プロキシのポートを指定していない場合は、ポート80を仮定します。

オプションで、ドメインまたはホストごとにポート番号を指定できます。ポート番号が指定されていると、非プロキシの制限が適用されるのは、特定のドメインまたはホスト(corp.my-company.com、eng.my-company.com:80など)のポートでの要求のみです。 no_proxy_domainsの値がNULLでプロキシが設定されている場合、要求はすべてプロキシを経由して送信されます。 プロキシが設定されていない場合、UTL_HTTPにより要求がターゲットWebサーバーに直接送信されます。

プロキシ文字列の中で指定するプロキシのユーザー名またはパスワード、あるいはその両方を定義できます。書式は次のとおりです。

[http://][user[:password]@]host[:port][/]

データベース・サーバー・インスタンスの開始時にプロキシが設定されている場合は、環境変数http_proxyおよびno_proxyのプロキシ設定が想定されます。このプロシージャにより設定されたプロキシ設定は、初期の設定より優先されます。


SET_RESPONSE_ERROR_CHECKプロシージャ

このプロシージャは、Webサーバーがエラーを示すステータス・コード(4xxまたは5xx)を戻した場合に、GET_RESPONSEが例外を呼び出すかどうかを設定します。たとえば、要求したURLが宛先のWebサーバーで見つからない場合、404(ドキュメントが見つからない)の応答ステータス・コードが戻されます。

構文

UTL_HTTP.SET_RESPONSE_ERROR_CHECK (
   enable  IN BOOLEAN DEFAULT FALSE);

パラメータ

表207-50 SET_RESPONSE_ERROR_CHECKプロシージャのパラメータ

パラメータ 説明

enable

応答エラーをチェックする場合はTRUE、そうでない場合はFALSEです。


使用上の注意

ステータス・コードがエラーを示す4xxまたは5xxで、このプロシージャが有効である場合は、GET_RESPONSEHTTP_CLIENT_ERRORまたはHTTP_SERVER_ERROR例外を呼び出します。 SET_RESPONSE_ERROR_CHECKFALSEに設定されている場合は、ステータス・コードがエラーを示してもGET_RESPONSEは例外を呼び出しません。

デフォルトでは、応答エラー・チェックはオフになっています。

SET_RESPONSE_ERROR_CHECKFALSEに設定すると、GET_RESPONSEファンクションによってその他の例外が発生する可能性があります。


SET_TRANSFER_TIMEOUTプロシージャ

このプロシージャは、Webサーバーまたはプロキシ・サーバーからHTTP応答を読み込むまでUTL_HTTPパッケージが試行する、将来のすべてのHTTP要求についてのデフォルトのタイムアウト値を設定します。このタイムアウト値を使用して、WebサーバーからWebページを取り出す間、ビジー状態のWebサーバーや通信量の多いネットワークによりPL/SQLプログラムがブロックされることを回避します。

構文

UTL_HTTP.SET_TRANSFER_TIMEOUT (
   timeout  IN PLS_INTEGER DEFAULT 60);

パラメータ

表207-51 SET_TRANSFER_TIMEOUTプロシージャのパラメータ

パラメータ 説明

timeout

ネットワーク転送のタイムアウト値(秒)。


使用上の注意

タイムアウトのデフォルト値は60秒です。


SET_WALLETプロシージャ

このプロシージャは、Secure Sockets Layer(SSL)、つまりHTTPSを経由するHTTP要求すべてに使用するOracle Walletを設定します。 UTL_HTTPパッケージがSSLを介してHTTPサーバーと通信する場合、HTTPサーバーは認証局が署名したデジタル証明書をUTL_HTTPパッケージに示し、身分を証明します。 Oracle Walletには、UTL_HTTPパッケージのユーザーが信頼する認証局のリストが含まれています。Oracle Walletは、HTTPS要求を作成するために必要です。

構文

UTL_HTTP.SET_WALLET (
   path      IN VARCHAR2,
   password  IN VARCHAR2 DEFAULT NULL);

パラメータ

表207-52 SET_WALLETプロシージャのパラメータ

パラメータ 説明

path

Oracle Walletを含むディレクトリ・パス。 形式はfile:<directory-path>です。

wallet_pathの形式は、たとえば、PCではfile:c:\WINNT\Profiles\<username>\WALLETS、UNIXではfile:/home/<username>/walletsとなります。UTL_HTTPパッケージがOracle Databaseサーバーで実行される場合は、データベース・サーバーからWalletにアクセスします。したがって、Walletのパスにデータベース・サーバーからアクセスできる必要があります。

password

Walletのオープンに必要なパスワード。パスワードなしの場合、Walletディレクトリ内のWalletの2番目のコピーでオープンする場合があります。この2番目のコピーは読取り専用です。 passwordNULLの場合、UTL_HTTPパッケージがWalletの2番目の読取り専用コピーをオープンします。


使用上の注意

Oracle Walletを設定するには、Oracle Wallet Managerを使用してWalletを作成します。HTTPS要求を成功させるには、リモートHTTPS Webサーバーの証明書に署名した認証局がWalletに設定されたトラスト・ポイントであることが必要です。

Walletが作成されると、トラスト・ポイントとして認識された認証局に移入されます。リモートHTTPS Webサーバーの証明書に署名した認証局がトラスト・ポイントにない場合、または新しいルート証明書を持っている場合は、認証局のルートの証明書を取得し、Oracle Wallet Managerを使用してWalletのトラスト・ポイントとしてインストールする必要があります。


関連項目:

Wallet Managerの詳細は、『Oracle Database Advanced Security管理者ガイド』を参照してください。


WRITE_LINEプロシージャ

このプロシージャは、HTTP要求本体にテキスト行を書き込み、改行文字(UTL_TCPで定義されるCRLF)を使用して行を終了します。HTTP要求本体と同じデータが送信されると、HTTP要求ヘッダーのセクションはただちに完了します。テキスト・データは、データベース・キャラクタ・セットから要求本体のキャラクタ・セットに自動的に変換されます。

構文

UTL_HTTP.WRITE_LINE(
   r     IN OUT NOCOPY req,
   data  IN VARCHAR2 CHARACTER SET ANY_CS);

パラメータ

表207-53 WRITE_LINEプロシージャのパラメータ

パラメータ 説明

r

HTTP要求。

data

HTTP要求本体に組み込まれて送信されるテキスト行。


使用上の注意

HTTPクライアントはリモートWebサーバーに対し、送信する要求本体の長さを常に知らせる必要があります。データ量があらかじめわかっている場合、Content-Lengthヘッダーを要求に設定できます。この場合、コンテンツの長さが文字数ではなくバイト数で計測されます。要求の長さが不明の場合は、HTTP 1.1 chunked transfer-encoding形式を使用して要求本体を送信できます。要求本体はチャンクで送信されます。このとき、チャンク自体が送信される前に各チャンクの長さが送信されます。 Transfer-Encoding: chunkedヘッダーが設定されると、UTL_HTTPパッケージは要求本体に対し、chunked transfer-encodingを透過的に実行します。HTTP 1.1ベースのWebサーバーまたはCGIプログラムは、HTTP 1.1 chunked transfer-encoding形式でエンコードされた要求本体をサポートしていません。詳細は、SET_HEADERプロシージャを参照してください。

Content-Lengthヘッダーを送信する場合は、データベース・キャラクタ・セットから要求本体のキャラクタ・セットに変換された後、ヘッダーで指定した長さとテキストの要求本体のバイト数での長さを同じにする必要があります。2つのキャラクタ・セットのうちいずれかがマルチバイト・キャラクタ・セットである場合、要求本体のキャラクタ・セットの正確なバイト数での長さをあらかじめ認識することはできません。この場合、明示的にキャラクタ・セットの変換を実行し、結果のバイト数の長さを判別し、Content-Lengthヘッダーを送信し、WRITE_RAWプロシージャを使用してキャラクタ・セットの自動変換を回避します。または、リモートWebサーバーまたはCGIプログラムが対応する場合は、HTTP 1.1 chunked transfer-encoding形式を使用して要求本体を送信できます。UTL_HTTPはチャンクの長さを透過的に処理します。


WRITE_RAWプロシージャ

このプロシージャは、HTTP要求本体にバイナリ・データを書き込みます。HTTP要求本体と同じデータが送信されると、HTTP要求ヘッダーのセクションはただちに完了します。

構文

UTL_HTTP.WRITE_RAW(
   r     IN OUT NOCOPY REQ,
   data  IN            RAW);

パラメータ

表207-54 WRITE_RAWプロシージャのパラメータ

パラメータ 説明

r

HTTP要求。

data

HTTP要求本体に組み込まれて送信されるバイナリ・データ。


使用上の注意

HTTPクライアントはリモートWebサーバーに対し、送信する要求本体の長さを常に知らせる必要があります。データ量があらかじめわかっている場合、Content-Lengthヘッダーを要求に設定できます。この場合、コンテンツの長さが文字数ではなくバイト数で計測されます。要求の長さが不明の場合は、HTTP 1.1 chunked transfer-encoding形式を使用して要求本体を送信できます。要求本体はチャンクで送信されます。このとき、チャンク自体が送信される前に各チャンクの長さが送信されます。Transfer-Encoding: chunkedヘッダーが設定されると、UTL_HTTPは要求本体に対し、chunked transfer-encodingを実行します。HTTP 1.1ベースのWebサーバーまたはCGIプログラムは、HTTP 1.1 chunked transfer-encoding形式でエンコードされた要求本体をサポートしていません。詳細は、SET_HEADERプロシージャを参照してください。


WRITE_TEXTプロシージャ

このプロシージャは、HTTP要求本体にテキスト・データを書き込みます。HTTP要求本体と同じデータが送信されると、HTTP要求ヘッダーのセクションはただちに完了します。テキスト・データは、データベース・キャラクタ・セットから要求本体のキャラクタ・セットに自動的に変換されます。

構文

UTL_HTTP.WRITE_TEXT(
   r     IN OUT NOCOPY REQ,
   data  IN            VARCHAR2 CHARACTER SET ANY_CS);

パラメータ

表207-55 WRITE_TEXTプロシージャのパラメータ

パラメータ 説明

r

HTTP要求。

data

HTTP要求本体に組み込まれて送信されるテキスト・データ。


使用上の注意

HTTPクライアントはリモートWebサーバーに対し、送信する要求本体の長さを常に知らせる必要があります。データ量があらかじめわかっている場合、Content-Lengthヘッダーを要求に設定できます。この場合、コンテンツの長さが文字数ではなくバイト数で計測されます。要求の長さが不明の場合は、HTTP 1.1 chunked transfer-encoding形式を使用して要求本体を送信できます。要求本体はチャンクで送信されます。このとき、チャンク自体が送信される前に各チャンクの長さが送信されます。Transfer-Encoding: chunkedヘッダーが設定されると、UTL_HTTPは要求本体に対し、chunked transfer-encodingを実行します。HTTP 1.1ベースのWebサーバーまたはCGIプログラムは、HTTP 1.1 chunked transfer-encoding形式でエンコードされた要求本体をサポートしていません。詳細は、SET_HEADERプロシージャを参照してください。

Content-Lengthヘッダーを送信する場合は、データベース・キャラクタ・セットから要求本体のキャラクタ・セットに変換された後、ヘッダーで指定した長さとテキストの要求本体のバイト数での長さを同じにする必要があります。2つのキャラクタ・セットのうちいずれかがマルチバイト・キャラクタ・セットである場合、要求本体のキャラクタ・セットの正確なバイト数での長さをあらかじめ認識することはできません。この場合、明示的にキャラクタ・セットの変換を実行し、結果のバイト数の長さを判別し、Content-Lengthヘッダーを送信し、WRITE_RAWプロシージャを使用してキャラクタ・セットの自動変換を回避します。または、リモートWebサーバーまたはCGIプログラムが対応する場合は、HTTP 1.1 chunked transfer-encoding形式を使用して要求本体を送信できます。UTL_HTTPはチャンクの長さを透過的に処理します。