プライマリ・コンテンツに移動
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス
12c リリース1 (12.1)
B71281-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

252 UTL_HTTP

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

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


関連項目:


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

UTL_HTTPの使用方法

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

概要

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

このパッケージは、HTTPSとも呼ばれるSecured Socket Layer protocol (SSL)上のHTTPをサポートしています。また、リモートWebサーバーで認証をするためにウォレットでクライアント証明書を送信することで、SSLクライアント認証もサポートしています。

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

セキュリティ・モデル

このパッケージは実行者権限のパッケージであるため、起動するユーザーには、接続するリモート・ネットワーク・ホストに割り当てられたアクセス制御リストによってconnect権限が付与されている必要があります。また、Oracle Walletに格納されている資格証明を使用してリモートWebサーバーに対してユーザー自身を認証するためのuse-client-certificates権限とuse-passwords権限も必要となります。


注意:

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

定数

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

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

名前 タイプ 説明

HTTP_VERSION_1_0

VARCHAR2(10)

'HTTP/1.0'

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

HTTP_VERSION_1_1

VARCHAR2(10)

'HTTP/1.1'

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


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

名前 タイプ 説明

DEFAULT_HTTP_PORT

PLS_INTEGER

80

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

DEFAULT_HTTPS_PORT

PLS_INTEGER

443

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


表252-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));

パラメータ

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

パラメータ 説明

url

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

method

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

http_version

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


使用上の注意

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

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

REQUEST_CONTEXT_KEYタイプ

このタイプは、要求コンテキストへのキーを表すために使用します。要求コンテキストとは、HTTP要求で使用するプライベートのWalletおよびCookieの表を保持しているコンテキストのことです。プライベートのWalletおよびCookieの表は、パッケージに保持されているセッション全体の表とは異なり、データベース・セッション内の他のHTTP要求と共有されません。

構文

SUBTYPE request_context_key IS PLS_INTEGER;

使用上の注意

セキュリティを強化するために、UTL_HTTPではPL/SQLプログラムにより要求コンテキストを作成できます。要求コンテキストはプライベート・コンテキストで、HTTP要求時およびHTTP応答の受信時に同じデータベース・セッション内の他のプログラムと共有されない、WalletおよびCookieの表を保持しています。PL/SQLプログラムで機密情報(認証の資格証明書など)を含むWalletやCookieを使用する場合は、要求コンテキストを使用する必要があります。

RESPタイプ

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

構文

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

パラメータ

表252-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レコード・タイプのフィールド

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

表252-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フィールドは、Secured Socket 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プロトコルへのアクセスを提供します。インタフェースは、図252-1に示す順序でコールする必要があります。そうでない場合は、例外が発生します。

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

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

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

  • Cookieを操作する非プロトコル・インタフェース

    • GET_COOKIE_COUNT

    • GET_COOKIES

    • ADD_COOKIES

    • CLEAR_COOKIES

  • 永続的接続

    • GET_PERSISTENT_CONN_COUNT

    • GET_PERSISTENT_CONNS

    • CLOSE_PERSISTENT_CONN

    • CLOSE_PERSISTENT_CONNS

  • UTL_HTTPパッケージの属性および構成を現行のセッションで操作するインタフェース

    • SET_PROXY

    • GET_PROXY

    • SET_COOKIE_SUPPORT

    • GET_COOKIE_SUPPORT

    • SET_FOLLOW_REDIRECT

    • GET_FOLLOW_REDIRECT

    • SET_BODY_CHARSET

    • GET_BODY_CHARSET

    • SET_PERSISTENT_CONN_SUPPORT

    • GET_PERSISTENT_CONN_SUPPORT

    • SET_DETAILED_EXCP_SUPPORT

    • GET_DETAILED_EXCP_SUPPORT

    • SET_WALLET

    • SET_TRANSFER_TIMEOUT

    • GET_TRANSFER_TIMEOUT

  • UTL_HTTPパッケージの最新の詳細な例外コードおよびメッセージを現行のセッションで取り出すインタフェース

    • GET_DETAILED_SQLCODE

    • GET_DETAILED_SQLERRM


      注意:

      要求および応答のインタフェースによっては、現行のセッションでパッケージの属性および構成を操作するインタフェースと同じ名前を設定できる場合があります。これらは、要求または応答を操作するインタフェースのオーバーロード・バージョンです。

単純な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要求

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

HTTP応答

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

HTTP Cookie

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

HTTPの永続的接続

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

エラー条件

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

セッションの設定

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

要求コンテキスト

UTL_HTTPパッケージは、すべてのHTTP要求と応答が共有できる共通のWalletおよびCookieの表をデータベース・セッション内に保持します。これによって、セッション内でWalletを共有したり、Cookieにアプリケーション状態を保持することが容易になります。ただし、同じデータベース・セッション内の他のアプリケーションとは共有しないWalletまたはCookieにプライベート情報を格納するアプリケーションの場合は、固有のWalletおよびCookieの表を保持する要求コンテキストを定義し、それを使用してHTTP要求を行うことができます。

外部パスワード・ストア

UTL_HTTPパッケージでは、HTTPパスワードの資格証明をOracle Walletの外部パスワード・ストアに格納することができます。外部パスワード・ストアを使用すると、パスワードを容易かつ安全に格納できるため、アプリケーション開発者が記憶域を保持する必要がなくなります。

例外

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

表252-7 UTL_HTTPの例外

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

BAD_ARGUMENT

29261

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

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

BAD_URL

29262

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

detailed_exceptionが有効な場合のBEGIN_REQUEST

END_OF_BODY

29266

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

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

HEADER_NOT_FOUND

29265

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

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

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

NETWORK_ACCESS_DENIED

24247

リモート・ネットワーク・ホストまたはOracle Wallet内の資格証明へのアクセスが拒否されました。

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

ILLEGAL_CALL

29267

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

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

PARTIAL_MULTIBYTE_EXCEPTION

29275

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

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

PROTOCOL_ERROR

29263

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

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

REQUEST_FAILED

29273

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

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

TOO_MANY_REQUESTS

29270

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

detailed_exceptionが有効な場合のBEGIN_REQUEST

TRANSFER_TIMEOUT

29276

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

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

UNKNOWN_SCHEME

29264

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

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



注意:

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);
  name      VARCHAR2(256);
  value     VARCHAR2(256);
BEGIN
  -- Turn off checking of status code. We will check it by ourselves.
  UTL_HTTP.SET_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, FALSE);
    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.');
    UTL_HTTP.END_RESPONSE(resp);
    RETURN;
  ELSIF (resp.status_code = UTL_HTTP.HTTP_PROXY_AUTH_REQUIRED) THEN
    UTL_HTTP.GET_AUTHENTICATION(resp, my_scheme, my_realm, TRUE);
    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.');
    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;
/

プライベートのWalletおよびCookieの表によるHTTP要求

SET SERVEROUTPUT ON SIZE 40000
 
CREATE OR REPLACE PROCEDURE DISPLAY_PAGE(url IN VARCHAR2) AS
  request_context UTL_HTTP.REQUEST_CONTEXT_KEY;
  req             UTL_HTTP.REQ;
  resp            UTL_HTTP.RESP;
  data            VARCHAR2(1024);
 
BEGIN

  -- Create a request context with its wallet and cookie table
  request_context := UTL_HTTP.CREATE_REQUEST_CONTEXT(
                       wallet_path          => 'file:/oracle/wallets/test/wallet',
                       wallet_password      => '******',
                       enable_cookies       => TRUE,
                       max_cookies          => 300,
                       max_cookies_per_site => 20);
 
  -- Make a HTTP request using the private wallet and cookie
  -- table in the request context
  req := UTL_HTTP.BEGIN_REQUEST(
           url             => url,
           request_context => request_context);
  resp := UTL_HTTP.GET_RESPONSE(req);
 
  BEGIN
    LOOP
       UTL_HTTP.READ_TEXT(resp, data);
       DBMS_OUTPUT.PUT(data);
    END LOOP;
  EXCEPTION
      WHEN UTL_HTTP.END_OF_BODY THEN
         UTL_HTTP.END_RESPONSE(resp); 
  END;
 
  -- Destroy the request context
  UTL_HTTP.DESTROY_REQUEST_CONTEXT(request_context);
 
END;
 
BEGIN
  DISPLAY_PAGE('https://www.example.com/');
END;
/

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

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

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

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

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

サブプログラム 説明

REQUESTファンクション


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

REQUEST_PIECESファンクション


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


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

表252-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要求サブプログラム

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

サブプログラム 説明

BEGIN_REQUESTファンクション


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

SET_HEADERプロシージャ


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

SET_AUTHENTICATIONプロシージャ


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

SET_AUTHENTICATION_FROM_WALLETプロシージャ


Oracle Walletに格納されているユーザー名とパスワードの資格証明を使用して、Webサーバーで認証される要求に必要なHTTP要求ヘッダーのHTTP認証情報を設定します。

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要求コンテキスト・サブプログラム

表252-11 UTL_HTTPサブプログラム: HTTP要求コンテキスト

サブプログラム 説明

CREATE_REQUEST_CONTEXTファンクション


UTL_HTTP内にWalletおよびCookieの表に対する要求コンテキストを作成します。

DESTROY_REQUEST_CONTEXTプロシージャ


UTL_HTTPの要求コンテキストを破棄します。


HTTP応答サブプログラム

表252-12 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サブプログラム

表252-13 UTL_HTTPサブプログラム: HTTP Cookie

サブプログラム 説明

ADD_COOKIESプロシージャ


要求コンテキストまたはUTL_HTTPパッケージのセッション状態のいずれかにCookieを追加します。

CLEAR_COOKIESプロシージャ


要求コンテキストまたはUTL_HTTPパッケージのセッション状態のいずれかに保持されているCookieをすべて消去します。

GET_COOKIE_COUNTファンクション


要求コンテキストまたはUTL_HTTPパッケージのセッション状態のいずれかに保持されているCookieの数を戻します。

GET_COOKIESファンクション


要求コンテキストまたはUTL_HTTPパッケージのセッション状態のいずれかに保持されているすべてのCookieを戻します。


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

表252-14 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サーバーに戻します。


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

表252-15 UTL_HTTPサブプログラム: エラー条件

サブプログラム 説明

GET_DETAILED_SQLCODEファンクション


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

GET_DETAILED_SQLERRMファンクション


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


UTL_HTTPサブプログラムの要約

表252-16 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の永続的接続サブプログラム


CREATE_REQUEST_CONTEXTファンクション


UTL_HTTP内にWalletおよびCookieの表に対する要求コンテキストを作成します。

HTTP要求サブプログラム


DESTROY_REQUEST_CONTEXTプロシージャ


WalletおよびCookieの表に対する、UTL_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_AUTHENTICATION_FROM_WALLETプロシージャ


Oracle Walletに格納されているユーザー名とパスワードの資格証明を使用して、Webサーバーで認証される要求に必要なHTTP要求ヘッダーのHTTP認証情報を設定します。

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,
   request_context  IN  request_context_key DEFAULT NULL);

パラメータ

表252-17 ADD_COOKIESプロシージャのパラメータ

パラメータ 説明

cookies

追加されるCookie。

request_context

Cookieを追加する要求コンテキスト。NULLの場合、CookieはUTL_HTTPパッケージのセッション状態に追加されます。


使用上の注意

パッケージが現在保持する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,
   request_context   IN  request_context_key DEFAULT NULL)
RETURN req;

パラメータ

表252-18 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です。

request_context

このHTTP要求で使用するプライベートのWalletおよびCookieの表を保持する要求コンテキスト。このパラメータがNULLの場合、現在のデータベース・セッションで共有しているWalletおよびCookieの表がかわりに使用されます。


使用上の注意

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

  • BEGIN_REQUESTは、長さが32767バイト以下のURLを送信できます。ただし、受け入れることができるURLの長さの制限はWebサーバーごとに異なります。多くの場合、この制限は4000バイトです。この制限を超えた場合の結果は、Webサーバーによって異なります。たとえば、Webサーバーが応答を戻さずにHTTP接続を削除する場合があります。この場合、続けてGET_RESPONSEファンクションを実行すると、PROTOCOL_ERROR例外が発生します。

    URLのQUERY_STRING(疑問符(?)の後の情報)が長い場合、URLは長くなります。通常、POSTメソッドを使用して、要求本体でこのパラメータ指定を送信することをお薦めします。

    req := UTL_HTTP.BEGIN_REQUEST (url=>the_url, method=>'POST');
    UTL_HTTP.SET_HEADER (r      =>  req, 
                         name   =>  'Content-Type',   
                         value  =>  'application/x-www-form-urlencoded');
    UTL_HTTP.SET_HEADER (r      =>   req, 
                         name   =>   'Content-Length', 
                         value  =>'  <length of data posted in bytes>');
    UTL_HTTP.WRITE_TEXT (r      =>   req, 
                         data   =>   'p1 = value1&p2=value2...');
    resp := UTL_HTTP.GET_RESPONSE 
                         (r     =>   req);
    ...
    

    プログラマは、特定のWebサーバーがこの方法で提供されたデータを受け入れるかどうかを決定する必要があります。

  • HTTPSを介してWebサーバーにアクセスするには、Oracle Walletを設定する必要があります。Oracle Walletの設定方法については、「SET_WALLETプロシージャ」を参照してください。SSLクライアント認証を使用するには、クライアント証明書をWallet内に格納し、コール側はWalletに対するuse-client-certificates権限を所有する必要があります。権限の付与については、『Oracle Databaseセキュリティ・ガイド』の外部ネットワーク・サービスへのファイングレイン・アクセスの管理に関する項を参照してください。

  • リモートWebサーバーに直接接続するか、またはHTTPプロキシを介して間接的に接続するには、UTL_HTTPに、リモートWebサーバー・ホストまたはプロキシ・ホストそれぞれへのconnect ACL権限が必要です。

CLEAR_COOKIESプロシージャ

このプロシージャは、要求コンテキストまたはUTL_HTTPパッケージのセッション状態のいずれかに保持されているCookieをすべて消去します。

構文

UTL_HTTP.CLEAR_COOKIES (
   request_context  IN  request_context_key DEFAULT NULL);

パラメータ

表252-19 CLEAR_COOKIESプロシージャのパラメータ

パラメータ 説明

request_context

Cookieを消去する要求コンテキスト。NULLの場合、UTL_HTTPパッケージのセッション状態に保持されているCookieがかわりに消去されます。


CLOSE_PERSISTENT_CONNプロシージャ

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

構文

UTL_HTTP.CLOSE_PERSISTENT_CONN (
   conn  IN connection);

パラメータ

表252-20 CLOSE_PERSISTENT_CONNプロシージャのパラメータ

パラメータ 説明

conn

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


CLOSE_PERSISTENT_CONNSプロシージャ

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

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

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

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

次のプロシージャ・コールによって、TCP/IPポート80のfoobarを介した永続的接続がすべて閉じられます。

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);

パラメータ

表252-21 CLOSE_PERSISTENT_CONNSプロシージャのパラメータ

パラメータ 説明

host

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

port

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

proxy_host

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

proxy_port

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

ssl

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


使用上の注意

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

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

CREATE_REQUEST_CONTEXTファンクション

このファンクションは、要求コンテキストを作成します。要求コンテキストとは、HTTP要求時にプライベートで使用するWalletおよびCookieを保持しているコンテキストのことです。これによって、HTTP要求では、同じデータベース・セッションでHTTP要求をする他のアプリケーションと共有されないWalletおよびCookieの表を使用できます。

構文

UTL_HTTP.CREATE_REQUEST_CONTEXT (
 wallet_path          IN VARCHAR2 DEFAULT NULL,
 wallet_password      IN VARCHAR2 DEFAULT NULL,
 enable_cookies       IN BOOLEAN  DEFAULT TRUE,
 max_cookies          IN PLS_INTEGER DEFAULT 300,
 max_cookies_per_site IN PLS_INTEGER DEFAULT 20)
RETURN request_context_key;

パラメータ

表252-22 CREATE_REQUEST_CONTEXTファンクションのパラメータ

パラメータ 説明

wallet_path

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

wallet_password

Walletのオープンに必要なパスワード。Walletの自動ログインが有効の場合は、パスワードを省略してNULLに設定する必要があります。ウォレットの詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。

enable_cookies

この要求コンテキストを使用しているHTTP要求が、HTTP Cookieをサポートするかどうかを設定します。TRUEの場合はサポートが有効になり、FALSEの場合はサポートが無効になります。

max_cookies

この要求コンテキストで保持されるCookieの最大合計数を設定します。

max_cookies_per_site

この要求コンテキストで保持されるWebサイトごとのCookieの最大数を設定します。


戻り値

作成された要求コンテキスト。

DECLARE
  request_context  UTL_HTTP.REQUEST_CONTEXT_KEY;
  req              utl_http.req;
BEGIN
  request_context := UTL_HTTP.CREATE_REQUEST_CONTEXT(
       wallet_path          => 'file:/oracle/wallets/test_wallets',
       wallet_password      => NULL,
       enable_cookies       => TRUE,
       max_cookies          => 300,
       max_cookies_per_site => 20);
  req := UTL_HTTP.BEGIN_REQUEST(
       url                  => 'http://www.example.com/',
       request_context      => request_context);
END;

DESTROY_REQUEST_CONTEXTプロシージャ

このプロシージャは、UTL_HTTPの要求コンテキストを破棄します。HTTP要求またはHTTP応答で要求コンテキストが使用されている場合、その要求コンテキストを破棄することはできません。

構文

UTL_HTTP.DESTROY_REQUEST_CONTEXT (
   request_context    request_context_key);

パラメータ

表252-23 DESTROY_REQUEST_CONTEXTプロシージャのパラメータ

パラメータ 説明

request_context

破棄する要求コンテキスト。


DECLARE
  request_context  UTL_HTTP.REQUEST_CONTEXT_KEY;
BEGIN
  request_context := UTL_HTTP.CREATE_REQUEST_CONTEXT(…);
  …
  UTL_HTTP.DESTROY_REQUEST_CONTEXT(request_context);
END;

END_REQUESTプロシージャ

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

構文

UTL_HTTP.END_REQUEST (
   r  IN OUT NOCOPY req);

パラメータ

表252-24 END_REQUESTプロシージャのパラメータ

パラメータ 説明

r

HTTP要求。


END_RESPONSEプロシージャ

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

構文

UTL_HTTP.END_RESPONSE (
   r  IN OUT NOCOPY resp);

パラメータ

表252-25 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);

パラメータ

表252-26 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);

パラメータ

表252-27 GET_BODY_CHARSETプロシージャのパラメータ

パラメータ 説明

charset

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


GET_COOKIE_COUNTファンクション

このファンクションは、要求コンテキストまたはUTL_HTTPパッケージのセッション状態のいずれかに保持されているCookieの数を戻します。

構文

UTL_HTTP.GET_COOKIE_COUNT (
   request_context  IN  request_context_key DEFAULT NULL) 
 RETURN PLS_INTEGER;

パラメータ

表252-28 GET_COOKIE_COUNTファンクションのパラメータ

パラメータ 説明

request_context

Cookieの数が戻される要求コンテキスト。NULLの場合は、UTL_HTTPパッケージのセッション状態に保持されているCookieの数が戻されます。


GET_COOKIE_SUPPORTプロシージャ

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

構文

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

パラメータ

表252-29 GET_COOKIE_SUPPORTプロシージャのパラメータ

パラメータ 説明

enable

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

max_cookies

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

max_cookies_per_site

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


GET_COOKIESファンクション

このファンクションは、要求コンテキストまたはUTL_HTTPパッケージのセッション状態のいずれかに保持されているCookieをすべて戻します。

構文

UTL_HTTP.GET_COOKIES (
   cookies          IN  OUT NOCOPY cookie_table,
   request_context  IN             request_context_key DEFAULT NULL);

パラメータ

表252-30 GET_COOKIESファンクションのパラメータ

パラメータ 説明

cookies

戻されるCookie。

request_context

Cookieが戻される要求コンテキスト。NULLの場合、UTL_HTTPパッケージのセッション状態に保持されているCookieがかわりに戻されます。


GET_DETAILED_EXCP_SUPPORTプロシージャ

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

構文

UTL_HTTP.GET_DETAILED_EXCP_SUPPORT (
   enable  OUT BOOLEAN);

パラメータ

表252-31 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);

パラメータ

表252-32 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);

パラメータ

表252-33 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);

パラメータ

表252-34 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;

パラメータ

表252-35 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);

パラメータ

表252-36 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);

パラメータ

表252-37 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);

パラメータ

表252-38 GET_PROXYプロシージャのパラメータ

パラメータ 説明

proxy

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

no_proxy_domains

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


GET_RESPONSEファンクション

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

構文

UTL_HTTP.GET_RESPONSE (
   r                       IN OUT NOCOPY req,
   return_info_response    IN BOOLEAN DEFAULT FALSE) 
RETURN resp;

パラメータ

表252-39 GET_RESPONSEファンクションのパラメータ

パラメータ 説明

r

HTTP応答。

return_info_response

100情報レスポンスを戻すか戻さないか。

  • TRUEを指定すると、get_responseはHTTPサーバーから100情報レスポンスを受信したときにこのレスポンスを戻します。100レスポンスが戻された場合、リクエストは終了しません。

  • FALSEを指定すると、APIはHTTPサーバーから受信した100情報レスポンスをすべて無視し、後続の100以外のレスポンスをかわりに戻します。デフォルトはFALSEです。


例外

  • 詳細例外を無効にした場合:

    ORA-29273 REQUEST_FAILED - 要求の実行に失敗しました。詳細なエラー・メッセージを取得するには、GET_DETAILED_EXCP_SUPPORTプロシージャGET_DETAILED_SQLERRMファンクションを使用します。

  • 詳細例外を有効にした場合:

    ORA-29261 BAD_ARGUMENT - 渡された引数の一部が無効です。

  • レスポンス・エラー検査を有効にした場合:

    ORA-29268 HTTP_CLIENT_ERROR - レスポンス・コードは400範囲内にあります。

    ORA-29269 HTTP_SERVER_ERROR - レスポンス・コードは500範囲内にあります。

使用上の注意

  • 例外が発生したかしないかに関係なく、このファンクションが戻ると要求は終了します。END_REQUESTプロシージャを起動する必要はありません。

  • URLリダイレクトが行われると、REQレコードのURLおよびmethodフィールドは、最後にリダイレクトされたURL、およびそのURLへのアクセスに使用されたメソッドに更新されます。

特定の状況では(HTTPクライアントによって開始された、または開始されていない)、HTTPサーバーは1xx情報レスポンスを戻す場合があります。このようなレスポンスを予期していないユーザーは、レスポンスを無視して通常のレスポンスの受信に進むようにGET_RESPONSEに指示できます。ユーザーがこのようなレスポンスを予期している場合、ユーザーはレスポンスを戻すようにGET_RESPONSEに指示できます。

たとえば、ユーザーが大きな要求本体を含むHTTP POST要求を発行する場合に、サーバーがデータを送信する前に要求を受け入れるように、HTTPサーバーを検査できます。このためには、ユーザーは追加のEXPECT: 100-CONTINUE要求ヘッダーを送信し、要求本体の送信に進む前に、サーバーから100 CONTINUEレスポンスがあるかどうか検査できます。その後、ユーザーは通常のHTTPレスポンスを受け取ります。

次に、コードの例を示します。

DECLARE
 data  VARCHAR2(1024) := '...';
 req   utl_http.req;
 resp  utl_http.resp;
BEGIN
   
 req := utl_http.begin_request('http://www.acme.com/receiver', 'POST');
 utl_http.set_header(req, 'Content-Length', length(data));
 -- Ask HTTP server to return "100 Continue" response
 utl_http.set_header(req, 'Expect', '100-continue');
 resp := utl_http.get_response(req, TRUE);
   
 -- Check for and dispose "100 Continue" response
 IF (resp.status_code <> 100) THEN
   utl_http.end_response(resp);
   raise_application_error(20000, 'Request rejected');
 END IF;
 utl_http.end_response(resp);
   
 -- Now, send the request body
 utl_http.write_text(req, data);
 
 -- Get the regular response
 resp := utl_http.get_response(req);
 utl_http.read_text(resp, data);
   
 utl_http.end_response(resp);
   
END;

GET_RESPONSE_ERROR_CHECKプロシージャ

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

構文

UTL_HTTP.GET_RESPONSE_ERROR_CHECK (
   enable  OUT BOOLEAN);

パラメータ

表252-40 GET_RESPONSE_ERROR_CHECKプロシージャのパラメータ

パラメータ 説明

enable

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


GET_TRANSFER_TIMEOUTプロシージャ

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

構文

UTL_HTTP.GET_TRANSFER_TIMEOUT (
   timeout  OUT PLS_INTEGER);

パラメータ

表252-41 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);

パラメータ

表252-42 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);

パラメータ

表252-43 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);

パラメータ

表252-44 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);

パラメータ

表252-45 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> 

SQL> 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);

パラメータ

表252-46 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(len); 
  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);

パラメータ

表252-47 SET_AUTHENTICATIONプロシージャのパラメータ

パラメータ 説明

r

HTTP要求

username

HTTP認証のユーザー名。

password

HTTP認証のパスワード。

scheme

HTTP認証方式。Basic(HTTP基本認証方式)またはAWS(Amazon S3認証方式)のいずれか。デフォルトはBasicです。

for_proxy

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


使用上の注意

サポートされている認証方式は、HTTP基本認証およびAmazon S3認証です。

SET_AUTHENTICATION_FROM_WALLETプロシージャ

このプロシージャは、Oracle Walletに格納されているユーザー名とパスワードの資格証明を使用して、Webサーバーで認証される要求に必要なHTTP要求ヘッダーのHTTP認証情報を設定します。

構文

UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET(
   r         IN OUT NOCOPY req,
   alias     IN VARCHAR2,
   scheme    IN VARCHAR2 DEFAULT 'Basic',
   for_proxy IN BOOLEAN  DEFAULT FALSE);

パラメータ

表252-48 SET_AUTHENTICATION_FROM_WALLETプロシージャのパラメータ

パラメータ 説明

r

HTTP要求。

alias

Oracle Walletに格納されているユーザー名とパスワードを識別して取得するための別名。

scheme

HTTP認証方式。Basic(HTTP基本認証方式)またはAWS(Amazon S3認証方式)のいずれか。デフォルトはBasicです。

for_proxy

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


使用上の注意

  • Wallet内のパスワードの資格証明を使用するには、UTL_HTTPユーザーにWalletに対するuse-passwords権限が必要です。

  • サポートされている認証方式は、HTTP基本認証方式およびAmazon S3認証方式です。

Walletを作成し、Walletにユーザー名とパスワードを入力する場合

> mkstore -wrl /oracle/wallets/test_wallet -create
Enter password: ******
Enter password again: ******
> mkstore –wrl /oracle/wallets/test_wallet –createCredential hr-access jsmith 
Your secret/Password is missing in the command line
Enter your secret/Password: ****
Re-enter your secret/Password: ****
Enter wallet password: ******

データベース管理者が、Walletに対するuse-passwords権限をユーザーに付与する場合

BEGIN
  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
    acl         => 'wallet-acl.xml', 
    description => 'Wallet ACL',
    principal   => 'SCOTT',
    is_grant    => TRUE,
    privilege   => 'use-passwords');
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_WALLET_acl(
      acl          => 'wallet-acl.xml', 
      wallet_path  => 'file: /oracle/wallets/test_wallet');
END;

Wallet内のユーザー名とパスワードを使用する場合

DECLARE
  req  UTL_HTTP.req;
BEGIN
  UTL_HTTP.SET_WALLET(path => 'file:/oracle/wallets/test_wallet');
  req := UTL_HTTP.BEGIN_REQUEST(…);
  UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET(req, 'hr-access');
  …
END;

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);

パラメータ

表252-49 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);

パラメータ

表252-50 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要求に対して無効である場合は、その要求でCookieはWebサーバーに戻されず、要求への応答に設定された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);

パラメータ

表252-51 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);

パラメータ

表252-52 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);

パラメータ

表252-53 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要求がHTTP 1.1の永続的接続をサポートする必要があるかどうかを設定し、現在のデータベース・ユーザー・セッションで保持される永続的接続の最大数を設定します。

UTL_HTTP.SET_PERSISTENT_CONN_SUPPORT(
   enable      IN BOOLEAN DEFAULT FALSE,
   max_conns   IN PLS_INTEGER DEFAULT 0);

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

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

パラメータ

表252-54 SET_PERSISTENT_CONN_SUPPORTプロシージャのパラメータ

パラメータ 説明

enable

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

maximum_conns

接続の最大数

r

HTTP要求。


使用上の注意

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

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

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

UTL_HTTPで永続的接続を使用すると、同じサーバーから複数のWebページをフェッチする時間を短縮できる一方で、データベース・サーバーの貴重なシステム・リソース(ネットワーク接続)が消費されることにユーザーは注意してください。また、データベース・サーバーで多くのネットワーク接続がオープンにされたままである場合、永続的接続を過度に使用すると、データベース・サーバーのスケーラビリティが低下することがあります。ネットワーク接続は、後続の要求により即時使用される場合にのみオープンにし、不要な場合にはクローズしてください。「例」に示すように、セッションではデフォルトの永続的接続のサポートは無効に設定し、個々のHTTP要求で永続的接続を有効にします。

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

永続的接続を使用する必要がある場合は、BEGIN_REQUESTファンクションをコールする前に、maximum_connsパラメータを受け取るオーバーロードをコールする必要があります。このようにしなければ、他の形式のSET_PERSISTENT_CONN_SUPPORTがコールされた場合であっても、現在の要求に対して永続的接続が有効になりません。

セッション・レベルでのhttp要求の中でSET_PERSISTENT_CONN_SUPPORTを使用して、それぞれの要求後にアクティブな永続接続を示します。

DECLARE
  pieces utl_http.html_pieces;
  conns  utl_http.connection_table;
BEGIN
 
  -- Turns on persistent connection support for the request_pieces call.
  utl_http.set_persistent_conn_support(true, 1);
 
  FOR i IN 1..10 LOOP
 
    pieces := utl_http.request_pieces('http://www.example.com/');
 
    -- Shows the active persistent connection
    utl_http.get_persistent_conns(conns);
    FOR j IN 1..conns.count LOOP
       dbms_output.put_line('Persistent connection '||j||': '||conns(j).host||':'||conns(j).port);
    END LOOP;
 
  END LOOP;
 
 
  -- Turns off persistent connection support. Set active max persistent connection to 0 to close all active connections.
  utl_http.set_persistent_conn_support(false, 0);
 
END;
/

SET_PERSISTENT_CONN_SUPPORTをHTTP要求内で使用することで、それぞれの要求の中で永続接続を個々に使用して同じホストで複数のURLをフェッチする方法を示します。

DECLARE
-- Table to store the URLs
TYPE vc2_table IS TABLE OF VARCHAR2(256) INDEX BY BINARY_INTEGER;
paths VC2_TABLE;

PROCEDURE fetch_pages(paths IN vc2_table) AS
  req  UTL_HTTP.REQ;
  resp UTL_HTTP.RESP;
  data VARCHAR2(1024);

BEGIN

  -- Set the proxy server
  UTL_HTTP.SET_PROXY('www-proxy.example.com:80', '');

  FOR i IN 1..paths.count LOOP

    req := UTL_HTTP.BEGIN_REQUEST(paths(i));

    -- Use persistent connections except for the last request
    IF (i < paths.count) THEN
      -- Use a persistent connection for the current request
      UTL_HTTP.SET_PERSISTENT_CONN_SUPPORT(req, TRUE);
    END IF;

    resp := UTL_HTTP.GET_RESPONSE(req);

    -- Display the results of the response
    DBMS_OUTPUT.PUT_LINE('-');
    DBMS_OUTPUT.PUT_LINE('URL: ' || paths(i));
    DBMS_OUTPUT.PUT_LINE('HTTP Response Status Code:   ' || resp.status_code);
    DBMS_OUTPUT.PUT_LINE('HTTP Response Reason Phrase: ' || resp.reason_phrase);
    DBMS_OUTPUT.PUT_LINE('HTTP Response Version:       ' || resp.http_version);

    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
-- Set a maximum of 1 persistent connection, but start with persistent connections 
-- off
   UTL_HTTP.SET_PERSISTENT_CONN_SUPPORT(FALSE, 1);

   -- Create a list of URLs
   paths(1) := 'http://www.example.com/technetwork/index.html';
   paths(2) := 'http://www.example.com/us/products/index.html';

   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);

パラメータ

表252-55 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);

パラメータ

表252-56 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);

パラメータ

表252-57 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);

パラメータ

表252-58 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の自動ログインが有効の場合は、パスワードを省略してNULLに設定する必要があります。自動ログイン・ウォレットを作成するためのOracle Wallet ManagerおよびORAPKIユーティリティの使用方法については、『Oracle Database Advanced Security管理者ガイド』「自動ログインを有効にしたウォレットの使用」を参照してください。


使用上の注意

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);

パラメータ

表252-59 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つのキャラクタ・セットのうちいずれかがマルチバイト・キャラクタ・セットである場合、要求本体のキャラクタ・セットの正確なバイト数での長さをあらかじめ知ることはできません。この場合、明示的にキャラクタ・セットの変換を実行し、結果のバイト長を判別し、キャラクタ・セットの自動変換を回避するためにWRITE_RAWプロシージャを使用してContent-Lengthヘッダーおよび結果を送信します。または、リモート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);

パラメータ

表252-60 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);

パラメータ

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