SAK 図書館
Oracle PL/SQL 編19 - ウェブアクセス、UTL_HTTP、UTL_URL、UTL_INADDR
■UTL_HTTP
・UTL_HTTP パッケージでは、HTTP プロトコルでウェブサーバにアクセスでき
る。かなりローレベルなこともできる仕様になっている。
(Oracle8i - 8.1.6 以降、Oracle9i - 9.0.1 で機能拡張あり)
REQUEST URL から 2000 バイト取得
REQUEST_PIECES URL から 2000 バイトピース取得
SET_PROXY プロキシ設定
GET_PROXY プロキシ取得
SET_COOKIE_SUPPORT Cookie サポート設定
GET_COOKIE_SUPPORT Cookie サポート取得
SET_FOLLOW_REDIRECT リダイレクト最大回数設定
GET_FOLLOW_REDIRECT リダイレクト最大回数取得
SET_BODY_CHARSET デフォルトキャラクタセット設定
GET_BODY_CHARSET デフォルトキャラクタセット取得
SET_PERSISTENT_CONN_SUPPORT 永続的接続最大回数設定
GET_PERSISTENT_CONN_SUPPORT 永続的接続最大回数取得
SET_RESPONSE_ERROR_CHECK 例外設定
GET_RESPONSE_ERROR_CHECK 例外設定取得
SET_DETAILED_EXCP_SUPPORT 詳細例外設定
GET_DETAILED_EXCP_SUPPORT 詳細例外設定取得
SET_WALLET SSL 経由 Wallet 設定
SET_TRANSFER_TIMEOUT タイムアウト値設定
GET_TRANSFER_TIMEOUT タイムアウト値取得
BEGIN_REQUEST HTTP リクエスト
SET_HEADER HTTP ヘッダ設定
SET_AUTHENTICATION HTTP 認証設定
WRITE_TEXT HTTP リクエストテキスト書き込み
WRITE_LINE HTTP リクエストテキスト 1 行書き込み
WRITE_RAW HTTP リクエストテキスト raw 書き込み
END_REQUEST HTTP リクエスト終了
GET_RESPONSE HTTP レスポンス取得
GET_HEADER_COUNT HTTP レスポンスヘッダ数取得
GET_HEADER HTTP レスポンスヘッダ取得
GET_HEADER_BY_NAME HTTP レスポンス特定ヘッダ取得
GET_AUTHENTICATION HTTP 認証情報取得
READ_TEXT HTTP レスポンステキスト読み込み
READ_LINE HTTP レスポンステキスト 1 行読み込み
READ_RAW HTTP レスポンステキスト raw 読み込み
END_RESPONSE HTTP レスポンス終了
GET_COOKIE_COUNT Cookie 数取得
GET_COOKIES Cookie 取得
ADD_COOKIES Cookie 追加
CLEAR_COOKIES Cookie クリア
GET_PERSISTENT_CONN_COUNT 永続的接続数取得
GET_PERSISTENT_CONNS 永続的接続取得
CLOSE_PERSISTENT_CONN 永続的接続クローズ
CLOSE_PERSISTENT_CONNS 永続的接続クローズ
GET_DETAILED_SQLCODE 例外の sqlcode 取得
GET_DETAILED_SQLERRM 例外の sqlerrm 取得
■SET_PROXY
・プロキシの仕様設定を行います。
実行は、begin_request の前で行います。
utl_http.set_proxy('proxy.sak-design.com', 'sak.sak-design.com');
| |_ プロキシを使用しない
| ホスト名及び、ドメイン
| (in varchar2)
|_ プロキシホスト名
(in varchar2)
■BEGIN_REQUEST
・HTTP リクエストを送信します。
rq := utl_http.begin_request('http://sak-design/');
| |_ URL
| (in varchar2)
|_ 戻り値(req)
HTTP リクエスト
rq := utl_http.begin_request('http://sak-design/', 'GET', httpver);
| | | |_ HTTP Version
| | | 省略値 NULL
| | | (in varchar2)
| | |_ METHOD
| | 省略値 'GET'
| | (in varchar2)
| |_ URL
| (in varchar2)
|_ 戻り値(req)
HTTP リクエスト
■SET_HEADER
・HTTP リクエストヘッダを設定します。
utl_http.set_header(rq, 'User-Agent', 'Mozilla/4.0');
| | |_ HTTP リクエストヘッダ値
| | (in varchar2)
| |_ HTTP リクエストヘッダ名
| (in varchar2)
|_ HTTP リクエスト
(in out req)
■GET_RESPONSE
・HTTP レスポンスを取得します。
rs := utl_http.get_response(rq);
| |_ HTTP リクエスト
| (in out req)
|_ 戻り値(resp)
HTTP レンポンス
■READ_LINE
・HTTP レスポンスから、1 行データを取得します。
取得データがない場合、UTL_HTTP.END_OF_BODY 例外が発生します。
utl_http.read_line(rs, rec, true);
| | |_ TRUE 改行文字削除
| | FALSE 改行文字付き
| | 省略値 FALSE
| | (in boolean)
| |_ HTTP ソース 1 行バッファ
| (out varchar2)
|_ HTTP レンポンス
(in out resp)
■END_RESPONSE
・HTTP レスポンスを終了します。
utl_http.end_response(rs);
|_ HTTP レンポンス
(in out resp)
■HTML 取得
・次のサンプルは、リモート IP アドレス、リモートホスト名を表示すると共
に指定ウェブサーバにアクセスして、HTML ソースを取得する。
set serveroutput on;
declare
url varchar2(200) := 'http://sak-design/';
rq utl_http.req;
rs utl_http.resp;
rec varchar2(2000);
fno utl_file.file_type;
ip varchar2(15);
rh varchar2(200);
begin
-- リモート IP アドレス、リモートホスト名取得
ip := utl_inaddr.get_host_address();
rh := utl_inaddr.get_host_name(ip);
dbms_output.put_line('IP = ' || ip);
dbms_output.put_line('リモートホスト名 = ' || rh);
-- HTML 取得
rq := utl_http.begin_request(utl_url.escape(url));
utl_http.set_header(rq, 'User-Agent', 'Mozilla/4.0');
rs := utl_http.get_response(rq);
fno := utl_file.fopen('g:\tmp', 'test.htm', 'W', 2002);
loop
utl_http.read_line(rs, rec, true);
utl_file.put_line(fno, rec);
end loop;
utl_http.end_response(rs);
utl_file.fclose(fno);
exception
when UTL_HTTP.END_OF_BODY then -- HTML 取得 AT END
utl_http.end_response(rs);
utl_file.fclose(fno);
end;
/
■UTL_HTTP 例外
REQUEST_FAILED 29273 要求実行失敗
BAD_ARGUMENT 29261 引数エラー
BAD_URL 29262 URL エラー
PROTOCOL_ERROR 29263 HTTP プロトコルエラー
UNKNOWN_SCHEME 29264 URL スキーム不明
HEADER_NOT_FOUND 29265 ヘッダーが見つからない
END_OF_BODY 29266 HTTP レスポンス終端
ILLEGAL_CALL 29267 UTL_HTTP コールエラー
HTTP_CLIENT_ERROR 29268 レスポンスクライアントエラー
HTTP_SERVER_ERROR 29269 レスポンスサーバーエラー
TOO_MANY_REQUESTS 29270 オープン要求、応答が多すぎる
PARTIAL_MULTIBYTE_EXCEPTION 29275 マルチバイトキャラクタ検出
TRANSFER_TIMEOUT 29276 タイムアウト発生
■UTL_URL
・UTL_URL パッケージは、URL 中に含まれるパラメタなどの空白やカンマを
エスケープ文字に変換する場合に使用する。
(Oracle9i - 9.0.1 以降)
ESCAPE エスケープ文字を含む URL に変換
UNESCAPE エスケープ文字を含む URL をオリジナルに変換
esurl := utl_url.escape(url);
| |_ オリジナル URL (in varchar2)
|_ 戻り値(varchar2)
エスケープ文字変換 URL
url := utl_url.unescape(esurl);
| |_ エスケープ文字変換 URL (in varchar2)
|_ 戻り値(varchar2)
オリジナル URL
■UTL_INADDR
・UTL_INADDR パッケージは、リモートホスト情報を取得する場合に使用する。
(Oracle8i - 8.1.6 以降)
GET_HOST_ADDRESS リモートホスト IP アドレス取得
GET_HOST_NAME リモートホスト名取得
ip := utl_inaddr.get_host_address();
| |_ リモートホスト名を指定すると
| 該当する IP が返る。
| 省略可 (in varchar2)
|_ 戻り値(varchar2)
IP アドレス
rh := utl_inaddr.get_host_name(ip);
| |_ IP アドレスを指定すると
| 該当するリモートホスト名が返る。
| 省略可 (in varchar2)
|_ 戻り値(varchar2)
リモートホスト名
■Oracle PL/SQL 編資料
■SQL 基礎実地編資料
■SQL 基礎編資料
■SQL チューニング編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料