SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2024 Y.SAK