powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / utl_http с авторизацией
8 сообщений из 8, страница 1 из 1
utl_http с авторизацией
    #40109146
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давно не пользовал utl_http.

Подскажите, запрос на URL с авторизацией можно сделать в одну строку?
Или надо UTL_HTTP. SET_HEADER ( .... ) ? Если так - каков минимальный набор?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create or replace procedure soap_test is
   v_http_response   CLOB;

BEGIN
   --v_http_response := utl_http.request('http://192.168.0.68/'); -- тут все ништяк, в таблицу записалась html-страница с ответом
   v_http_response := utl_http.request('http://192.168.0.68/ka_centr/ru_RU/ws/SuperMag.1cws?wsdl'); -- тут записался NULL
   insert into soap_log(text) values(v_http_response);
   commit;
end soap_test;
...
Рейтинг: 0 / 0
utl_http с авторизацией
    #40109395
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приемлемый вариант для меня.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
create or replace procedure soap_test is
  l_userid         varchar2(100) := 'WebService';
  l_passwd         varchar2(100) := '';
  l_url            varchar2(1000) := 'http://'||l_userid||':'||l_passwd||'@192.168.0.68/ka_centr/ru_RU/ws/SuperMag.1cws?wsdl';
  v_http_response  CLOB;
  
  l_sqlerrm        varchar2(4000);

BEGIN
  
  DBMS_LOB.createtemporary(v_http_response, FALSE); 
  v_http_response := HTTPURITYPE(l_url).getclob;
   
  insert into soap_log(text) values(v_http_response);
  commit;
  
  DBMS_LOB.freetemporary(v_http_response);
EXCEPTION
  WHEN OTHERS THEN
    l_sqlerrm := sqlerrm ||chr(10)||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE();
    DBMS_LOB.freetemporary(v_http_response);
    insert into soap_log(text) values(l_sqlerrm);
    commit;

end soap_test;




Еще варианты, мной не проверенные.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
----------------------------------
  l_http_request  := UTL_HTTP.begin_request(l_url); 
  
  utl_http.set_header(l_http_request, 'Authorization', 'Basic ' || 
                                       utl_raw.cast_to_varchar2(utl_encode.base64_encode(
                                         utl_i18n.string_to_raw('userid:passwd', 'UTF8')
                                      ))
  );
  
  l_http_response := UTL_HTTP.get_response(l_http_request);
  -- Copy the response into the BLOB.
  BEGIN
    LOOP
        UTL_HTTP.read_raw(l_http_response, l_raw, 32767);
        DBMS_LOB.writeappend (v_http_response, UTL_RAW.length(l_raw), l_raw);
    END LOOP;
  EXCEPTION
    WHEN UTL_HTTP.end_of_body THEN
      UTL_HTTP.end_response(l_http_response);
  END;   
----------------------------------
  
   req := UTL_HTTP.begin_request('http://some.site.com/');
   UTL_HTTP.set_authentication(req, 'bob', 'swordfish');
   resp := UTL_HTTP.get_response(req);




Сложный вариант с множеством параметров .
...
Рейтинг: 0 / 0
utl_http с авторизацией
    #40110043
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,

Так называемый приемлемый вариант не пойдет - как понимаю там basic-авторизация и запрос должен содержать заголовок Authorization как у вас дальше в примере
Код: plsql
1.
2.
3.
4.
utl_http.set_header(l_http_request, 'Authorization', 'Basic ' || 
                                       utl_raw.cast_to_varchar2(utl_encode.base64_encode(
                                         utl_i18n.string_to_raw('userid:passwd', 'UTF8')
                                      ))


с запросами и заголовками я бы тренировался в postman и уже потом на pl/sql перекладывал.
...
Рейтинг: 0 / 0
utl_http с авторизацией
    #40110198
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так называемый приемлемый вариант не пойдет - как понимаю там basic-авторизация

Уже работает. Как я понял, это просто вариант записи basic прямо в URL.
...
Рейтинг: 0 / 0
utl_http с авторизацией
    #40110235
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точно, про спец формат в url позабыл, т.к. такое давно не используем
...
Рейтинг: 0 / 0
utl_http с авторизацией
    #40110538
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне разработчик web-приложения говорит: предавай параметры в header.

Код: plsql
1.
2.
3.
  l_http_request  := UTL_HTTP.begin_request(l_url); 
  utl_http.set_header(l_http_request, 'Header1', 'test_value');  
  l_http_response := UTL_HTTP.get_response(l_http_request);



Как я могу проверить, что запрос с нужным header ушел?

На стороне Апача поставил LogLevel debug, вижу:

Код: powershell
1.
2.
3.
4.
5.
127.0.0.1 - - [10/Nov/2021:09:29:23 +0300] "GET / HTTP/1.1" 304 -
127.0.0.1 - - [10/Nov/2021:09:31:55 +0300] "GET / HTTP/1.1" 200 13834
127.0.0.1 - - [10/Nov/2021:09:38:53 +0300] "GET / HTTP/1.1" 200 13834
127.0.0.1 - - [10/Nov/2021:09:38:53 +0300] "GET /favicon.ico HTTP/1.1" 404 196
192.168.1.201 - - [10/Nov/2021:09:39:32 +0300] "GET /ka_centr/ru_RU/ws/SuperMag.1cws?wsdl HTTP/1.1" 200 3867



Первые четыре строчки - запросы из браузера http://localhost/, последняя - запрос из Oracle.
...
Рейтинг: 0 / 0
utl_http с авторизацией
    #40110544
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
header-ы ответа получить удалось


Код: plsql
1.
2.
3.
4.
5.
6.
7.
  l_name  VARCHAR2(256);
  l_value VARCHAR2(1024);  

  FOR i IN 1..UTL_HTTP.GET_HEADER_COUNT(l_http_response) LOOP
    UTL_HTTP.GET_HEADER(l_http_response, i, l_name, l_value);
    DBMS_OUTPUT.PUT_LINE(l_name || ': ' || l_value);
  END LOOP;



Код: powershell
1.
2.
3.
4.
5.
6.
Date: Wed, 10 Nov 2021 06:48:14 GMT
Server: Apache/2.4.51 (Win64) OpenSSL/1.1.1l
Upgrade: h2,h2c
Connection: Upgrade, close
Content-Length: 3867
Content-Type: text/xml; charset=utf-8



Видимо, header-ы запроса надо анализировать на стороне web-приложения.
...
Рейтинг: 0 / 0
utl_http с авторизацией
    #40110691
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Познакомился с Burp Suite, мощная штука.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
create or replace procedure soap_test is
  l_userid         varchar2(100) := 'WebService';
  l_passwd         varchar2(100) := '';
  l_url            varchar2(1000) := 'http://'||l_userid||':'||l_passwd||'@192.168.0.68/ka_centr/ru_RU/ws/SuperMag.1cws?wsdl';
  --l_url            varchar2(1000) := 'http://localhost:8080/';
  v_http_response  CLOB;
  --l_xml            xmltype;
  l_http_request   UTL_HTTP.req;
  l_http_response  UTL_HTTP.resp;
  l_text           varchar2(32767);

  l_sqlerrm        varchar2(4000);

  l_name  VARCHAR2(256);
  l_value VARCHAR2(1024);

BEGIN
  UTL_HTTP.SET_PROXY('127.0.0.1:8080', '*');
  l_http_request  := UTL_HTTP.begin_request(l_url);

  utl_http.set_header(l_http_request, 'Header1', 'test_value');


  l_http_response := UTL_HTTP.get_response(l_http_request);

  DBMS_OUTPUT.PUT_LINE('response headers:');
  FOR i IN 1..UTL_HTTP.GET_HEADER_COUNT(l_http_response) LOOP
    UTL_HTTP.GET_HEADER(l_http_response, i, l_name, l_value);
    DBMS_OUTPUT.PUT_LINE(l_name || ': ' || l_value);
  END LOOP;

  -- Copy the response into the BLOB.
  DBMS_LOB.createtemporary(v_http_response, FALSE);
  BEGIN
    LOOP
        UTL_HTTP.read_text(l_http_response, l_text, 32767);
        DBMS_LOB.writeappend (v_http_response, length(l_text), l_text);
    END LOOP;
  EXCEPTION
    WHEN UTL_HTTP.end_of_body THEN
      UTL_HTTP.end_response(l_http_response);
  END;

  --v_http_response := HTTPURITYPE(l_url).getclob;

  insert into soap_log(text) values(v_http_response);
  commit;
  /*
  l_xml := XMLTYPE.createxml(v_http_response);
  select t.xml.extract('//definitions').getStringVal() vvv
   from
  (select xmltype(text) xml from soap_log) t;
  */

  DBMS_LOB.freetemporary(v_http_response);
EXCEPTION
  WHEN OTHERS THEN
    l_sqlerrm := sqlerrm ||chr(10)||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE();
    DBMS_LOB.freetemporary(v_http_response);
    insert into soap_log(text) values(l_sqlerrm);
    commit;

end soap_test;

...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / utl_http с авторизацией
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]