Как создать узел в OpenText, используя RestAPI - метод POST из PL SQL?
Я пытаюсь создать узел в OpenText, используя RestAPI, метод POST для получения токена аутентификации работает нормально, но вызов POST для создания узла всегда возвращается 400 - Bad Request.
Обязательные параметры для создания узла: type
, parent_id
а также name
,
Любой вклад в то, что может быть не так?
Ниже мой блок кода:
DECLARE
v_token VARCHAR2 (200);
Otext_Auth_Username VARCHAR2 (30) := 'XXXXXXX';
Otext_Auth_Password VARCHAR2 (30) := 'YYYYYYY';
Otext_Auth_URL VARCHAR2 (200)
:= 'http://XXXXXXX/cs.exe/api/v1/auth?';
Otext_Content_URL VARCHAR2 (200)
:= 'http://XXXXXXX/cs.exe/api/v1/nodes';
PROCEDURE get_valid_auth_token
AS
FUNCTION get_token
RETURN VARCHAR2
AS
v_request UTL_HTTP.REQ;
v_response UTL_HTTP.RESP;
v_response_text VARCHAR2 (2000);
v_CONTENT VARCHAR2 (4000)
:= 'username='
|| Otext_Auth_Username
|| '&password='
|| Otext_Auth_Password;
BEGIN
v_request :=
UTL_HTTP.BEGIN_REQUEST (Otext_Auth_URL, 'POST', ' HTTP/1.1');
UTL_HTTP.SET_HEADER (
v_request
, 'content-type'
, 'application/x-www-form-urlencoded;charset=UTF-8');
UTL_HTTP.SET_HEADER (v_request, 'cache-control', 'no-cache');
UTL_HTTP.SET_HEADER (v_request
, 'Content-Length'
, LENGTH (v_CONTENT));
UTL_HTTP.WRITE_TEXT (v_request, v_CONTENT);
v_response := UTL_HTTP.GET_RESPONSE (v_request);
UTL_HTTP.READ_LINE (v_response, v_response_text, TRUE);
UTL_HTTP.END_RESPONSE (v_response);
v_response_text := REPLACE (v_response_text, '{"ticket":"', '');
v_response_text := REPLACE (v_response_text, '"}', '');
RETURN v_response_text;
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY
THEN
UTL_HTTP.END_RESPONSE (v_response);
RETURN v_response_text;
END;
BEGIN
v_token := get_token;
WHILE INSTR (v_token, '/', 1) > 1
OR INSTR (v_token, '\', 1) > 1
LOOP
DBMS_OUTPUT.PUT_LINE ('Invalid Token:' || v_token);
DBMS_OUTPUT.PUT_LINE (
'Token had invalid characters - fetch token again');
v_token := get_token;
END LOOP;
DBMS_OUTPUT.PUT_LINE ('Valid Token:' || v_token);
END get_valid_auth_token;
PROCEDURE Create_folder
AS
v_request UTL_HTTP.REQ;
v_response UTL_HTTP.RESP;
v_response_text VARCHAR2 (2000);
v_CONTENT VARCHAR2 (4000);
BEGIN
DBMS_OUTPUT.PUT_LINE ('**************************');
DBMS_OUTPUT.PUT_LINE ('Otext_Content_URL: ' || Otext_Content_URL);
v_CONTENT :=
'type='
|| 412 -- 0:Folder; 144 - File; 412 - Physical Item (Container); 424 - Physical Item (Box)
|| '&parent_id='
|| 3482206
|| '&name='
|| 'SJS_TEST_NODE';
DBMS_OUTPUT.PUT_LINE ('v_CONTENT: ' || v_CONTENT);
v_request :=
UTL_HTTP.BEGIN_REQUEST (Otext_Content_URL, 'POST', ' HTTP/1.1');
UTL_HTTP.SET_HEADER (v_request, 'otcsticket', v_token);
UTL_HTTP.SET_HEADER (v_request, 'cache-control', 'no-cache');
UTL_HTTP.SET_HEADER (
v_request
, 'content-type'
, 'application/x-www-form-urlencoded;charset=UTF-8');
UTL_HTTP.SET_HEADER (v_request, 'Content-Length', LENGTH (v_CONTENT));
--UTL_HTTP.SET_HEADER (v_request, 'type', 412);
--UTL_HTTP.SET_HEADER (v_request, 'parent_id', 3482206);
--UTL_HTTP.SET_HEADER (v_request, 'name', 'SJS_TEST_NODE');
UTL_HTTP.WRITE_TEXT (v_request, v_CONTENT);
v_response := UTL_HTTP.GET_RESPONSE (v_request);
IF v_response.status_code = UTL_HTTP.HTTP_OK
THEN
DBMS_OUTPUT.PUT_LINE ('Good:' || v_response.status_code);
ELSE
DBMS_OUTPUT.PUT_LINE ('Bad:' || v_response.status_code);
END IF;
--UTL_HTTP.READ_LINE (v_response, v_response_text, TRUE);
LOOP
UTL_HTTP.READ_LINE (v_response, v_response_text, TRUE);
DBMS_OUTPUT.PUT_LINE ('-->' || v_response_text);
END LOOP;
UTL_HTTP.END_RESPONSE (v_response);
DBMS_OUTPUT.PUT_LINE ('v_response_text:' || v_response_text);
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY
THEN
UTL_HTTP.END_RESPONSE (v_response);
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE (
'-->'
|| ' OTHER Error Msg : '
|| UTL_HTTP.GET_DETAILED_SQLCODE
|| UTL_HTTP.GET_DETAILED_SQLERRM);
END Create_folder;
BEGIN
get_valid_auth_token;
Create_folder;
END;
/