안녕하세요.
현재 오라클 프로시저 내에 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
==============================================================================================
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;
**************************************************************************************************************************************************************************