![]() |
|
Программирование >> Oracle
Пакет UTL HTTP В этом разделе мы рассмотрим, когда и как использовать пакет UTL HTTP. Кроме того, я хочу представить новую расширенную версию пакета UTL HTTP, созданную на основе типа SocketType, который рассматривается в разделе, посвященном пакету UTL TCP. Его производительность сравнима с обеспечиваемой стандартным пакетом UTL HTTP, а возможности - намного шире. Стандартный пакет UTL HTTP, поставляемый вместе с сервером, реализует весьма упрощенный подход. Он содержит две функции. UTL HTTP.REQUEST: возвращает до 2000 первых байт содержимого с заданным адресом URL. UTL HP.REQUEST PIECES: возвращает PL/SQL-таблицу элементов типа VARCHAR2(2000). Если конкатенировать последовательно все элементы, будет получено содержимое соответствующей страницы. В пакете UTL HTTP, однако, не хватает многих возможностей. Нельзя проверить заголовки HTTP. Это не позволяет выдавать сообщения об ошибках. Нельзя, например, различить ошибки доступа Not Found и Unauthorized. Нельзя перес1лать информацию на Web-сервер с помощью метода POST. Можно использовать только метод GET. Кроме того, не поддерживается метод HEAD протокола HTTP. С помощью пакета UTL HTTP нельзя получать двоичные данные. 1756 Приложение Интерфейс запроса страницы по частям (REQUEST PIECES) неочевиден - намного проще б1ло бы использовать данные типа CLOB или BLOB для возврата данных в виде потока (что обеспечило бы заодно и доступ к двоичным данным). Пакет не поддерживает ключики (cookies). Пакет не поддерживает даже простейшую аутентификацию. В пакете нет методов кодирования адреса URL. Одна из возможностей, которые пакет UTL HTTP поддерживает, - это использование протокола SSL. C помощью диспетчера Oracle Wallet можно выполнять запросы по протоколу HTTPS (HTTPS - это реализация протокола HTTP поверх SSL). Я продемонстрирую использование пакета UTL HTTP для доступа по протоколу SSL, но соответствующие возможности в пакете HTTP PKG реализовывать не будем. Полный текст пакета HTTP PKG вследствие большого размера в этом разделе не приводится; он доступен на сайте издательства Wrox по адресу http: www.wrox.com. Возможности пакета UTL HTTP Рассмотрим сначала функциональные возможности пакета UTL HP, поскольку предполагается реализовать аналогичные в пакете HTTP PKG. Простейший вариант использования средств пакета UTL HTTP представлен далее. В этом примере myserver - имя моего Web-сервера. Вы, разумеется, должны выполнить этот пример, обращаясь в Web-серверу, который вам доступен: ops$tkyte@DEV816>select utl http.request(http: myserver/) from dual; UTL HTTP.REQUEST(HTTP: MYSERVER/) <HTML> <HEAD> <TITLE>OracleServiceIndustries</TITLE> </HEAD> <FRAMESET COLS= 13 0,* border=0> <FRAME SRC= navtest.html NAME= sidebar frameborder=0> <FRAME SRC= folder home.html NAME= body frameborder= 0 marginheight = 0 marginwidth= 0 > </FRAMESET> </BODY> </HTML> Можно просто вызвать функцию UTL HTTP.REQUEST, передав ей адрес URL. Пакет UTL HP подключится к соответствующему Web-серверу и запросит (GET) указанную страницу, а затем вернет первые 2000 ее символов. Как уже б1ло сказано, не пытайтесь использовать указанный в примере адрес URL - это адрес моего рабочего Web-сервера в корпорации Oracle. Вы не сможете к нему добраться - по истечении времени ожидания будет выдано сообщение об ошибке. Большинство сетей сегодня защищено брандмауэрами (межсетевыми экранами). Если необходимая страница доступна только через промежуточный сервер брандмауэра, я мог Пакет UTL HTTP 1757 бы запросить ее и так. Обсуждение брандмауэров и промежуточных серверов выходит за рамки этой книги. Однако если известно имя хоста, на котором работает промежуточный сервер, можно выбрать через него страницу из Internet следующим образом: ops$tkyte@DEV816> select utl http.request(http: www.yahoo.com, www-> proxy) from dual; UTL HTTP.REQUEST(HTTP: WWW.YAHOO.COM,WWW-PROXY) <html><head><title>Yahoo!</title><base href=http: www.yahoo.com/><meta http-equiv= PICS-Label content=(PICS-l.l http: www.rsac.org/ ratingsv0l.html 1 gen true for http: www.yahoo.com r (n 0 s 0 v 0 1 0))></head><bodyXcenter><form action=http: search.yahoo.com/bin/ search><map name=m><area coords= 0,0,52,52 href=r/al><area coords= 53,0,121,52 href=r/pl><area coords= 122,0,191,52 href=r Второй параметр функций UTLHTTP.REQUEST и REQUESTPIECES - имя промежуточного сервера. Если промежуточный сервер работает не на стандартном порту (80), можно добавить номер порта следующим образом (в коде промежуточный сервер - myserver, и работает он на порту 8000): ops$tkyte@DEV816> select utl http.request(http: www.yahoo.com, 2 myserver:8000) from dual UTL HTTP.REQUEST(HTTP: WWW.YAHOO.COM,MYSERVER:8000) <html><head><title>Yahoo!</title><base href=http: www.yahoo.com/ Итак, добавив :8000 к имени промежуточного сервера, мы смогли к нему подключиться. Теперь давайте рассмотрим использование функции REQUESTPIECES: ops$tkyte@DEV816> declare 2 pieces utl http.html pieces; 3 n number default 0; 4 l start number default dbms utility.get time; 5 begin 6 pieces := 7 utl http.request pieces(url => http: vww.oracle.com/, 8 max pieces => 99999, 9 proxy = > www-proxy); 10 for i in 1 .. pieces.count 11 loop 12 loop 13 exit when pieces(i) is null; 14 dbms output.put line(substr(pieces(i),l,255)); 15 pieces(i) := substr(pieces(i), 2 56); 16 end loop; 17 end loop; 18 end; 19 / <head>
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |