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 編資料