UTL_HTTP
HTTP/1.1을 기준으로 작성되었으며, UTL_HTTP 패키지의 기본 개념과 패키지 내의 함수를 사용하는 방법을 설명합니다.
개요
UTL_HTTP는 웹 표준(RFC2616)인 HTTP 프로토콜에 따라 클라이언트 역할을 제공하는 패키지입니다. 프로토콜을 세부 조작하거나 간단히 웹 페이지만을 얻어올 수 있는 서브 프로그램을 제공합니다.
상수
HTTP 버전 상수
HTTP 버전의 종류를 나타냅니다.
HTTP 버전 상수의 세부 내용은 다음과 같습니다.
HTTP_VERSION_1 CONSTANT VARCHAR2(10) := 'HTTP/1.1';
DEFAULT_HTTPS_PORT CONSTANT PLS_INTEGER := 443;HTTP 포트 상수
HTTP에서 사용할 네트워크 포트 번호를 나타냅니다.
HTTP 포트 상수의 세부 내용은 다음과 같습니다.
DEFAULT_HTTP_PORT CONSTANT PLS_INTEGER := 80;
DEFAULT_HTTPS_PORT CONSTANT PLS_INTEGER := 443;상태 코드 상수
HTTP 프로토콜에 따라 서버로부터 받은 응답의 상태를 나타내는 코드입니다.
상태 코드 상수의 세부 내용은 다음과 같습니다. 이때 상태 코드는 번호 순으로 정렬되어 있습니다.
타입
본 절에서는 UTL_HTTP 패키지에서 제공하는 별도 정의된 타입들을 알파벳 순으로 설명합니다.
HTML_PIECES
서버로부터 응답받은 페이지를 문자열의 배열 형태로 받아올 때 사용하는 타입입니다.
HTML_PIECES 타입의 세부 내용은 다음과 같습니다.
프로토타입
req
서버로 보낼 요청 정보를 담고 있는 타입입니다.
req 타입의 세부 내용은 다음과 같습니다.
프로토타입
필드
url
웹 페이지의 주소이며, 자세한 내용은 “ URL”을 참고
method
서버에 어떠한 종류의 메서드를 요청할지를 나타냄
‘OPTIONS', ‘GET', ‘HEAD', ‘POST', ‘PUT', ‘DELETE', ‘TRACE', ‘CONNECT'의 값만을 허용 (이외는 미지원)
http_version
프로토콜 버전을 나타내며, 값의 종류는 “ HTTP 버전 상수”를 참고
resp
서버에서 온 응답에 대한 상태 정보를 담고 있는 타입입니다.
resp 타입의 세부 내용은 다음과 같습니다.
프로토타입
필드
status_code
요청에 따른 응답에 대한 상태를 나타내는 3자리의 숫자이며, 값의 종류는 “상태 코드 상수”를 참고
reason_phrase
상태 코드에 따른 간단한 설명
http_version
프로토콜 버전을 나타내며, 값의 종류는 “HTTP 버전 상수”를 참고
예외
다음은 UTL_HTTP 패키지에서 미리 제공된 예외입니다. 자세한 내용은 “함수”와 “프러시저”의
"예외 사항" 항목을 참고합니다.
BAD_ARGUMENT
END_OF_BODY
REQUEST_FAILED
함수
본 절에서는 UTL_HTTP 패키지에서 제공하는 함수를 알파벳 순으로 설명합니다.
BEGIN_REQUEST
웹 서버와 커넥션을 맺고, 어떤 메서드를 통해서 서버에 요청을 할 지 정합니다.
BEGIN_REQUEST 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
url
웹 페이지의 주소이며, 자세한 내용은 "URL" 을 참고
method
서버에 어떠한 종류의 메서드를 요청할지를 나타냄
허용되는 값:
'OPTIONS', 'GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'TRACE', 'CONNECT'(이외는 미지원)
http_version
프로토콜 버전을 나타내며, 값의 종류는 "HTTP 버전 상수"를 참고
예외 사항
REQUEST_FAILED
잘못된 요청으로 웹 서버와 통신할 수 없는 경우에 발생
URL이 올 바른지 또는 웹 서버가 정상적으로 동작하는지 확인
PKG_TRANSFER_TIMEOUT
20초 이상 웹 서버로부터 응답이 없을 때 타임아웃이 발생한 경우
GET_RESPONSE
웹 서버에 요청을 보내고, 응답의 헤더를 읽고, 바디를 읽을 준비를 합니다. 메시지 BODY를 읽는 방법은 2가지입니다.
첫 번째 방법은 메시지 헤더에 "Content-Length: 길이"가 있는 경우이며, 동작은 주어진 길이만큼 메시지 바디를 읽어옵니다. 두 번째 방법은 메시지 헤더에 "Transfer-Encoding: Chunked"가 오는 경우이며, 캐리지 리턴, 라인피드 문자가 나오는 경우까지 메시지 바디를 읽습니다. 헤더에 "Content-Length:길이"와 "Transfer- Encoding: Chunked"이 둘다 주어진 경우 전자는 무시됩니다.
GET_RESPONSE 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
r
요청 식별자
예외 사항
BAD_ARGUMENT
BEGIN_REQUEST 또는 SET_HEADER를 선행하지 않고 해당 함수를 호출 하거나, 파라미터를 잘못 사용하게 되는 경우 발생
REQUEST
URL을 통해 웹 서버로 요청을 보내 최대 2000bytes의 데이터를 반환하는 함수입니다. 웹 서버로 요청을 보낼 경우 HTTP/1.1 표준의 GET 메서드를 이용합니다.
REQUEST 함수의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
url
웹 페이지의 주소이며, 자세한 내용은 “URL”을 참고
proxy
프록시 서버의 이름 (기본값: NULL, 다음에 구현할 예정입니다)
wallet_path
클라이언트 쪽에서 HTTPS를 사용하기 위해 필요한 인증서를 저장하는 경로 (기본값: NULL, 다음에 구현할 예정입니다)
wallet_password
인증서를 보기 위한 패스워드 (기본값: NULL, 다음에 구현할 예정
예외 사항
REQUEST_FAILED
잘못된 요청으로 웹 서버와 통신할 수 없는 경우에 발생
URL이 올 바른지 또는 웹 서버가 정상적으로 동작하는지 확인
PKG_TRANSFER_TIMEOUT
20초 이상 웹 서버로부터 응답이 없을 때 타임아웃이 발생한 경우
GET_BODY_CHARSET
세션에 설정된 기본 메시지 바디 문자 집합의 이름을 가져옵니다.
GET_BODY_CHARSET 함수의 세부 내용은 다음과 같습니다.
프로토타입
예제
프러시저
END_RESPONSE
HTTP 요청을 끝낸다. 이때 자원(버퍼 메모리, 소켓)이 모두 반환되고, 초기화 상태로 변경됩니다.
END_RESPONSE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
r
http의 response
GET_BODY_CHARSET
세션에 설정된 기본 메시지 바디 문자 집합의 이름을 가져옵니다.
GET_BODY_CHARSET 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
charset
세션에 설정된 문자 집합 이름(캐노니컬 문자 집합 이름)
예제
6GET_DETAILED_EXCP_SUPPORT
세션에 설정된 UTL_HTTP 패키지 수행도중 발생하는 에러의 자세한 메시지 출력 여부 정보를 가져옵니다.
GET_DETAILED_EXCP_SUPPORT 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
enable
기능 활성화 여부를 나타냄
예제
GET_TRANSFER_TIMEOUT
현재 세션에 설정되어 있는 타임아웃 시간을 읽어옵니니다. (기본 타임아웃 시간: 50초)
GET_TRANSFER_TIMEOUT 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
timeout
세션에 설정된 타임아웃 시간
예제
READ_RAW
헤더를 제외한 요청 페이지의 바디를 바이너리 형태로 읽어옵니다.
READ_RAW 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
r
응답 식별자
data
헤더를 제외한 바디의 바이너리 형태
len
0 이상의 값이어야 하며, 최대 읽어올 문자열의 길이
이때 요청한 길이보다 바디가 짧게 남아 있는 경우에는 해당 길이보다 적게 읽어옴
예외 사항
BAD_ARGUMENT
GET_RESPONSE 함수를 선행하지 않고 해당 함수를 호출하거나, 파라미터 를 잘못 사용하게 되는 경우 발생
END_OF_BODY
바디 내용을 모두 읽었는데, 다시 한번 읽기 요청을 하게 되는 경우 발생
READ_TEXT
헤더를 제외한 요청 페이지의 바디를 읽어옵니다.
READ_TEXT 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
r
응답 식별자
data
헤더를 제외한 바디 문자열
len
0 이상의 값이어야 하며, 최대 읽어올 문자열의 길이
이때 요청한 길이보다 바디가 짧게 남아 있는 경우에는 해당 길이보다 적게 읽어옴
예외 사항
BAD_ARGUMENT
GET_RESPONSE 함수를 선행하지 않고 해당 함수를 호출하거나, 파라미터 를 잘못 사용하게 되는 경우 발생
END_OF_BODY
바디 내용을 모두 읽었는데, 다시 한번 읽기 요청을 하게 되는 경우 발생
READ_LINE
헤더를 제외한 요청 페이지의 바디를 한줄 읽어옵니다.
READ_LINE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
r
응답 식별자
data
헤더를 제외한 바디의 다음 읽어들일 한 라인의 문자열
remove_crlf
TRUE일 경우 newline charecter를 제외한 한 라인을 읽어옴
예외 사항
BAD_ARGUMENT
GET_RESPONSE 함수를 선행하지 않고 해당 함수를 호출하거나, 파라미터 를 잘못 사용하게 되는 경우 발생
END_OF_BODY
바디 내용을 모두 읽었는데, 다시 한번 읽기 요청을 하게 되는 경우 발생
SET_BODY_CHARSET
HTTP 요청이나 HTTP 응답 메시지 바디의 문자 집합을 지정합니다.
SET_BODY_CHARSET의 세부 내용은 다음과 같습니다.
CASE1
HTTP 요청이나 HTTP 응답에 문자 집합(Character Set)을 지정하지 않는 경우 그리고 메시지 헤더에 Content-Type이 지정되지 않은 경우, 문자 집합을 지정할수 있습니다. 메시지 헤더에 Content-Type이 지정 된 경우에는 무시됩니다. 세션 단위로 해당 정보의 설정이 가능합니다.
– 프로토타입
– 파라미터
charset
문자 집합(캐노니컬 문자 집합)의 이름 (기본값: 'ISO-8859-1') (예: ASCII, UTF-8, EUC-KR, CP949 ... 등)
CASE2
HTTP 요청의 헤더에 Content-Type이 지정되지 않은 경우, 바디의 문자 집합을 지정합니다. 문자열을 생략하는 경우, 'ISO-8859-1'로 간주됩니다. HTTP 요청 메시지 바디는 DB 문자 집합 문자열에서 지정된 문 자열 집합의 문자열로 자동 변환됩니다. 메시지 헤더에 Content-Type이 지정된 경우에는 무시됩니다. 한 번의 HTTP 요청에 대하여 설정 가능합니다.
– 프로토타입
– 파라미터
req
HTTP 요청
charset
문자 집합(캐노니컬 문자 집합)의 이름 (기본값: 'ISO-8859-1') (예: ASCII, UTF-8, EUC-KR, CP949 ... 등)
CASE3
HTTP 응답의 헤더에 Content-Type이 지정되지 않은 경우, 바디의 문자열로 간주되는 문자열 집합을 지정합니다. 문자열을 생략하는 경우, 'ISO-8859-1'로 간주됩니다. HTTP 응답 메시지 바디는 지정된 문자열 집합의 문자열에서 DB 문자 집합 문자열로 자동 변환됩니다. 메시지 헤더에 Content-Type이 지정된 경우 에는 무시됩니다. 한번의 HTTP 응답에 대하여 설정 가능합니다.
– 프로토타입
– 파라미터
resp
HTTP 응답
charset
문자 집합(캐노니컬 문자 집합)의 이름 (기본값: 'ISO-8859-1') (예: ASCII, UTF-8, EUC-KR, CP949 ... 등)
– 예외 사항
BAD_ARGUMENT
올바른 문자 집합 문자열을 넣지 않는 경우 발생
SET_DETAILED_EXCP_SUPPORT
세션에 설정된 UTL_HTTP 패키지 수행도중 발생하는 에러의 자세한 메시지 출력 여부를 설정합니다.
SET_DETAILED_EXCP_SUPPORT 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
enable
기능 활성화 여부를 나타냄 (기본값: 비활성화)
예제
SET_HEADER
서버로 보낼 요청에 헤더를 설정합니다. 여러 번 반복 수행하여 추가적인 헤더 정보의 추가가 가능합니다.
SET_HEADER 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
r
요청 식별자
name
설정할 헤더 이름
value
설정할 헤더 값
SET_RESPONSE_ERROR_CHECK
웹 서버로부터 받은 상태 코드가 에러에 대한 코드일 경우, 이를 GET_RESPONSE GET_RESPONSE에 서 상태 에러를 예외로 처리할 지를 설정하는 프러시저입니다. 400부터 599까지의 상태 코드가 상태 에러에 해당합니다.
SET_RESPONSE_ERROR_CHECK 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
enable
상태 에러 확인 기능 활성화 여부를 나타냄 (기본값: 비활성화)
SET_TRANSFER_TIMEOUT
현재 세션에 타임아웃 시간을 설정합니다. (기본 타임아웃 시간: 50초)
SET_TRANSFER_TIMEOUT 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
timeout
세션에 설정할 타임아웃 시간
예제
WRITE_TEXT
서버로 보낼 요청의 바디를 설정합니다.
WRITE_TEXT의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
r
요청 식별자
data
요청 바디의 내용
예외 사항
BAD_ARGUMENT
BEGIN_REQUEST 또는 SET_HEADER를 선행하지 않고 해당 함수를 호출 하거나, 파라미터를 잘못 사용하게 되는 경우 발생
END_OF_BODY
바디 내용을 모두 읽었는데, 다시 한번 읽기 요청을 하게 되는 경우 발생
SET_PERSISTENT_CONN_SUPPORT
현재 세션에 HTTP 영구 연결을 지원할지 여부와 유지되는 영구 연결의 최대 개수를 설정합니다.
SET_PERSISTENT_CONN_SUPPORT 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
enable
세션에 영구 연결을 지원할지 여부
max_conns
세션에 유지되는 영구 연결의 최대 개수
예제
SET_PROXY
현재 세션에 사용할 프록시 도메인과 프록시를 사용하지 않을 도메인 목록을 설정합니다.
SET_PROXY 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
proxy
세션에 사용할 프록시
no_proxy_domains
세션에 프록시를 사용하지 않을 도메인 목록
각 도메인들은 공백(' '), 쉼표(','), 세미콜론(';')으로 구분됨
URL
URL(Uniform Resource/ Locator)은 서버의 웹 페이지 주소를 나타내는 형태이며, 다음과 같은 형태로 구성됩니다.
다음은 각 항목에 대한 설명입니다.
scheme
http와 https가 있으며, https는 다음에 구현할 예정
user
proxy를 위해 존재하며, 다음에 구현할 예정
password
proxy를 위해 존재하며, 다음에 구현할 예정
host
HTTP 서버 호스트 이름
port
통신에 사용할 포트 번호
Last updated

