|
Программирование >> Oracle
1770 Приложение А p status txt - возвращаемый параметр. Он содержит полный текст записи статуса HTTP. Например, он может получить значение НР/1.0 200 ОК. p httpHeaders - этот параметр можно задавать при вызове, а по завершении работы он будет содержать заголовки http с запрошенного адреса URL. Bce установленные при вызове значения будут переданы Web-серверу как часть запроса. В этом же параметре по результатам вызова будут все заголовки, которые вернул Web-сервер. Этот параметр можно использовать для пос1лки ключиков или простой аутентификации, или для передачи необходимого заголовка http. p content - временный объект типа CLOB или BLOB (в зависимости о того, какая версия перегруженной процедуры вызывается), который автоматически создается пакетом (вам его создавать не нужно). Это временный большой объект для сеанса. Для освобождения памяти этого объекта в любой момент можно вызвать процедуру dbms lob.freetemporary, но можно и оставить его до конца сеанса -тогда объект будет освобожден автоматически. 19 procedure get url(p url in varchar2, 2 0 p proxy in varchar2 default NOLL, 21 p status out number, 22 p status txt out varchar2, 23 p httpHeaders in out CorrelatedArray, 24 p content in out clob) ; 25 27 procedure get url(p url in varchar2, 2 8 p proxy in varchar2 default NOLL, 2 9 p status out number, 3 0 p status txt out varchar2, 31 p httpHeaders in out CorrelatedArray, 32 p content in out blob); Далее следует процедура HEAD URL. Она выполняет стандартную команду HEAD протокола HTTP на Web-сервере. Входные и выходные параметры аналогичны одноименным параметрам рассмотренной ранее процедуры get url (но содержимое страницы не выбирается). Эта процедура пригодится для определения того, существует ли документ, какой у него mime-тип и б1л ли он изменен, без загрузки содержимого документа: 34 procedure head url(p url in varchar2, 3 5 p proxy in varchar2 default NULL, 3 6 p status out number, 37 p status txt out varchar2, 38 p httpHeaders out CorrelatedArray); Следующая функция, URLencode, используется при построении списка параметров GET или объектов типа CLOB для метода POST. Она используется для маскировки спе-циальн1х символов в адресах URL (Например, URL не может содержать пробел, символ % и т.п.). При передаче строки Hello World, функция urlencode вернет Hello%20World. 40 function urlencode(p str in varchar2) return varchar2; Пакет UTL HTTP 1771 Процедура Add A Cookie позволяет установить значение ключика для посылки Web-серверу. Надо передать только имя и значение ключика. Этой процедурой формируется соответствующий заголовок HTTP. Передаваемая в режиме in out переменная p httpHeaders в дальнейшем передается процедурам <GetjHeadjPost> url: 42 procedure add a cookie 43 (p name in varchar2, 44 p value in varchar2, 45 p httpHeaders in out CorrelatedArray); Следующая процедура, Set Basic Auth, позволяет задать имя пользователя/пароль для доступа к защищенной странице. Эта процедура формирует соответствующий заголовок HTTP. Передаваемая в режиме in out переменная p httpHeaders в дальнейшем передается процедурам <GetjHeadjPost> url: 47 procedure set basic auth 48 (p username in varchar2, 49 p password in varchar2, 50 p httpHeaders in out CorrelatedArray); Процедура set post parameter используется при задании адреса URL c большим (размером более 2000 байт или около того) набором входных параметров. Для больших запросов рекомендуется использовать метод POST. Эта процедура позволяет поочередно добавлять параметры к запросу POST. Запрос POST формируется в переданном параметре типа CLOB: 52 procedure set post parameter 53 (p name in varchar2, 54 p value in varchar2, 55 p post data in out clob, 56 p urlencode in boolean default FALSE) ; Следующие две процедуры аналогичны рассмотренным ранее процедурам GET URL, но в них добавлен входной параметр p post data. p post data - это объект типа CLOB, созданный с помощью вызовов рассмотренной выше процедуры set post parameter Оставшиеся входные и выходные параметры имеют такое же назначение, что и в процедурах GET URL: 58 procedure post url 5 9 (p url in varchar2, 6 0 p post data in clob, 61 p proxy in varchar2 default NULL, 62 p status out number, 63 p status txt out varchar2, 64 p httpHeaders in out CorrelatedArray, 65 p content in out clob) ; 66 67 procedure post url 6 8 (p url in varchar2, 6 9 p post data in clob, 7 0 p proxy in varchar2 default NULL, 71 p status out number, 72 p status txt out varchar2, 1772 Прожение А 73 p httpHeaders in out CorrelatedArray, 74 p content in out blob); 75 77 end; 78 / Package created. Вот и вся спецификация пакета; назначение задаваемых в нем процедур легко понять. Можно выполнять вызовы вроде GET URL для получения страницы по указанному адресу URL. При этом используется метод GET протокола HTTP для сброса содержимого соответствующей Web-страницы во временный объект типа BLOB или CLOB. Можно вызвать HEAD URL для получения заголовков соответствующей страницы. Так можно определить mime-тип, например, чтобы решить, использовать ли для получения страницы объект типа CLOB (для text/html) или типа BLOB (для image/gif)- Можно вызвать процедуру POST URL для того, чтобы послать по указанному адресу большие объемы данных. Есть также вспомогательные процедуры для установки ключиков в заголовке, для кодирования имени пользователя и пароля при простой аутентификации и т.д. Теперь, предполагая, что вы загрузили реализацию пакета HTTP PKG (тело пакета состоит из примерно 500 строк кода на языке PL/SQL), можно попробовать его в действии. Я представлю несколько служебных процедур, которые пригодятся при тестировании. Процедура Print clob выдает содержимое объекта типа CLOB с помощью пакета DBMS OUTPUT. Процедура Print Headers аналогичным образом выдает заголовки HTTP, выбранные ранее в переменную типа CorrelatedArray (это объектный тип, являющийся частью реализации пакета HP PKG). Упоминаемая ниже процедура P представлена в разделе, посвященном пакету DBMS OUTPUT, и позволяет в]давать длинные строки: ops$tkyte@DEV816> create or replace procedure print clob(p clob in clob) 2 as 3 l offset number default 1; 4 begin 5 loop 6 exit when l offset > dbms lob.getlength(p clob); 7 dbms output.put line(dbms lob.substr(p clob, 255, l offset)); 8 l offset := l offset + 255; 9 end loop; 10 end; 11 / ops$tkyte@DEV816> create or replace 2 procedure print headers(p httpHeaders correlatedArray) 3 as 4 begin 5 for i in 1 .. p httpHeaders.vals.count loop 6 p(initcap(p httpHeaders.valsi).name) : 7 p httpHeaders.vals(i).value); 8 end loop; 9 p(chr(9));
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |