UTL_HTTP를 통한 웹서비스 호출 관련 에러 현상 문의입니다. 0 0 2,452

by 벤솝 [PL/SQL] [2020.08.05 14:52:26]


안녕하세요.

현재 오라클 프로시저 내에 UTL_HTTP를 통해 웹서비스(구글 앱 푸쉬메세지 서비스)를 호출하는 코드를 테스트 하고 있습니다.

해당 서비스로 연결은 잘 되는 것 같은데...

1) 문제는 최초 호출 시(예를 들어서, Oracle SQL Developer를 처음 실행시키고 새 파일 생성 후, 해당 프로시저 호출)에 에러가 발생합니다.

UTL_HTTP.SET_TRANSFER_TIMEOUT(300) 으로 설정을 하면 5분동안 응답 대기 상태로 있다가 결국에는 아래와 같은 메시지 결과를 보여줍니다.

==============================================================================================

오류 보고 -
ORA-20502: P_PUSH_MSG_TEST Error : ORA-20502: P_PUSH_MSG_TEST Error :

 



400 Bad Request

 

 

Bad Request

 

Your browser sent a request that this server could not understand.
 

 

IBM_HTTP_Server at 10.100.10.101 Port 80



ORA-06512: at line 102

 

==============================================================================================

2) 의아한 점은 위 에러 메시지가 나온 후부터는 동일하게 호출하면 정상적으로 처리가 됩니다.

   그리고 처음처럼 Oracle SQL Developer를 종료하고 다시 시작하면 마찬가지로 에러가 발생합니다...

 

제가 프로시저에 무언가를 빠뜨린 부분이 있는 것인지요? 아니면 웹서버 설정쪽을 확인해야할까요?

조언해주시면 감사하겠습니다.

모두 좋은 하루 되세요.

c.f) 아래 프로시저 코드입니다.

**************************************************************************************************************************************************************************

DECLARE
    V_URL VARCHAR2(100) := '';
    V_REQ UTL_HTTP.REQ;
    V_RESP UTL_HTTP.RESP;
    V_JSON_TXT VARCHAR2(4000) := '{"user_id":"test","title":"[테스트]","body":"메시지내용","event":"test","contents":"test"}';
    V_BUFFER VARCHAR2(4000) := '';

BEGIN

    V_URL := 'http://10.100.10.101/push.do';
      
    UTL_HTTP.SET_TRANSFER_TIMEOUT(300); 
    
    V_REQ := UTL_HTTP.BEGIN_REQUEST (V_URL, 'POST', 'HTTP/1.1');
    
    UTL_HTTP.SET_BODY_CHARSET('UTF-8');

    UTL_HTTP.SET_HEADER(V_REQ, 'user-agent', 'mozilla/4.0');
    UTL_HTTP.SET_HEADER(V_REQ, 'content-type', 'application/json'); 
    UTL_HTTP.SET_HEADER(V_REQ, 'Content-Length', LENGTHB(V_JSON_TXT));
   

    UTL_HTTP.WRITE_TEXT(V_REQ, V_JSON_TXT);
    

    V_RESP := UTL_HTTP.GET_RESPONSE(V_REQ);

    BEGIN
             LOOP
                --UTL_HTTP.READ_LINE(V_RESP, V_BUFFER);
                UTL_HTTP.READ_TEXT(V_RESP, V_BUFFER);

                --***질문드린 내용의 에러메시지가 도출되는 부분입니다.(정상처리가 된 경우에만 'message_id'를 응답 받음)***                

                IF INSTR(V_BUFFER,'message_id') <= 0 THEN
                    RAISE_APPLICATION_ERROR( -20502, 'P_PUSH_MSG_TEST Error : ' || V_BUFFER);
                END IF;

             END LOOP;   

             UTL_HTTP.END_RESPONSE(V_RESP);


    EXCEPTION
    WHEN UTL_HTTP.END_OF_BODY THEN
        UTL_HTTP.END_RESPONSE(V_RESP);
    END;

EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR( -20502, 'P_PUSH_MSG_TEST99 Error : '|| SQLERRM );
END;

**************************************************************************************************************************************************************************

 

 

 

 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입