Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / utl_http с авторизацией / 8 сообщений из 8, страница 1 из 1
04.11.2021, 07:38
    #40109146
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
utl_http с авторизацией
Давно не пользовал 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
05.11.2021, 13:35
    #40109395
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
utl_http с авторизацией
Приемлемый вариант для меня.
Код: 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
08.11.2021, 16:51
    #40110043
Алымов Анатолий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
utl_http с авторизацией
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
09.11.2021, 09:00
    #40110198
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
utl_http с авторизацией
Так называемый приемлемый вариант не пойдет - как понимаю там basic-авторизация

Уже работает. Как я понял, это просто вариант записи basic прямо в URL.
...
Рейтинг: 0 / 0
09.11.2021, 11:13
    #40110235
Алымов Анатолий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
utl_http с авторизацией
Точно, про спец формат в url позабыл, т.к. такое давно не используем
...
Рейтинг: 0 / 0
10.11.2021, 09:44
    #40110538
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
utl_http с авторизацией
Мне разработчик 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
10.11.2021, 09:52
    #40110544
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
utl_http с авторизацией
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
10.11.2021, 14:12
    #40110691
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
utl_http с авторизацией
Познакомился с 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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / utl_http с авторизацией / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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