Я пытаюсь вызвать спокойный API из моей процедуры Oracle.
Во-первых, метод API имеет тип get, а не post, поэтому параметры отправляются через заголовок. основная цель API - отправлять полученные сообщения в виде SMS-сообщений некоторым провайдерам, а иногда и в арабском формате; Мы поняли, что полученные на арабском языке SMS непостижимы;
Итак, я создал тестовую процедуру, которая принимает сообщение и отправляет его в метод API тестирования, который возвращает то же сообщение, что и ответ.
Вызов API успешно выполнен, но ответ, только если используется арабский формат, выглядит как ����. Что следует добавить в мою процедуру, чтобы сообщения могли быть читаемыми? Я попытался использовать escape для сообщения и установить формат заголовка, как вы можете видеть в шаблоне ниже, но, к сожалению, ничего не получилось:
PROCEDURE TEST(lang VARCHAR2,
message VARCHAR2,
P_RESPONSE OUT VARCHAR2) AS
v_request UTL_HTTP.req;
v_response UTL_HTTP.resp;
v_text VARCHAR2(1024);
v_url VARCHAR2(1024);
v_message VARCHAR2(1024);
l_webservice_link VARCHAR2(128);
BEGIN
BEGIN
P_RESPONSE := '';
v_message := utl_url.escape(message);
--v_message :=utl_url.escape(message,false,'UTF-8');
--v_message :=utl_url.escape(message,false,'windows-1256');
--v_message :=utl_url.escape(message,false,'AL32UTF8');
--v_message :=utl_url.escape(message,false,'AR8MSWIN1256');
l_webservice_link := GET_PARAM('REST_API_URL');
v_url := l_webservice_link ||
'Mytest?strMessage=' || v_message||
'&strLang=' || lang;
v_request := UTL_HTTP.begin_request(v_url);
--UTL_HTTP.set_header(v_request, 'Content-Type', 'charset=UTF-8');
--UTL_HTTP.set_header(v_request, 'Content-Type', 'windows-1256');
v_response := UTL_HTTP.get_response(v_request);
LOOP
BEGIN
UTL_HTTP.read_text(v_response, v_text);
DBMS_OUTPUT.put_line(v_text);
EXCEPTION
WHEN UTL_HTTP.end_of_body THEN
NULL;
END;
EXIT WHEN v_text IS NULL;
END LOOP;
UTL_HTTP.end_response(v_response);
IF v_response.status_code <> 200 THEN
P_RESPONSE := v_response.reason_phrase;
END IF;
EXCEPTION
WHEN OTHERS THEN
P_RESPONSE := 'An error has occured: ' || SQLERRM;
END;
END TEST;
Любая помощь более чем ценится.