Программирование >>  Oracle 

1 ... 446 447 448 [ 449 ] 450 451 452 ... 469


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));



1 ... 446 447 448 [ 449 ] 450 451 452 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика