Как создать узел в 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;
/

0 ответов

Другие вопросы по тегам