Skip Headers

Oracle9i Supplied PL/SQL Packages and Types Reference
Release 2 (9.2)

Part Number A96612-01
Go To Documentation Library
Home
Go To Product List
Book List
Go To Table Of Contents
Contents
Go To Index
Index

Master Index

Feedback

Go to previous page Go to beginning of chapter Go to next page

UTL_HTTP , 2 of 2


Summary of UTL_HTTP Subprograms

Table 96-6  UTL_HTTP Subprograms--Simple HTTP Fetches in a Single Call
Subprogram Description

REQUEST Function

Returns up to the first 2000 bytes of the data retrieved from the given URL. This function can be used directly in SQL queries.

REQUEST_PIECES Function

Returns a PL/SQL table of 2000-byte pieces of the data retrieved from the given URL.

Table 96-7  UTL_HTTP Subprograms--Session Settings
Subprogram Description

SET_PROXY Procedure

Sets the proxy to be used for requests of HTTP or other protocols

GET_PROXY Procedure

Retrieves the current proxy settings

SET_COOKIE_SUPPORT Procedure

Sets whether or not future HTTP requests will support HTTP cookies; sets the maximum number of cookies maintained in the current database user session

GET_COOKIE_SUPPORT Procedure

Retrieves the current cookie support settings

SET_FOLLOW_REDIRECT Procedure

Sets the maximum number of times UTL_HTTP follows the HTTP redirect instruction in the HTTP responses to future requests in the get_response function

GET_FOLLOW_REDIRECT Procedure

Retrieves the follow-redirect setting in the current session

SET_BODY_CHARSET Procedure

Sets the default character set of the body of all future HTTP requests when the media type is text and the character set is not specified in the Content-Type header

GET_BODY_CHARSET Procedure

Retrieves the default character set of the body of all future HTTP requests

SET_PERSISTENT_CONN_SUPPORT Procedure

Sets whether or not future HTTP requests will support the HTTP 1.1 persistent connection; sets the maximum number of persistent connections maintained in the current database user session

GET_PERSISTENT_CONN_SUPPORT Procedure

Checks if the persistent connection support is enabled and gets the maximum number of persistent connections in the current session

SET_RESPONSE_ERROR_CHECK Procedure

Sets whether or not get_response raises an exception when the Web server returns a status code that indicates an error--a status code in the 4xx or 5xx ranges

GET_RESPONSE_ERROR_CHECK Procedure

Checks if the response error check is set or not

SET_DETAILED_EXCP_SUPPORT Procedure

Sets the UTL_HTTP package to raise a detailed exception

GET_DETAILED_EXCP_SUPPORT Procedure

Checks if the UTL_HTTP package will raise a detailed exception or not

SET_WALLET Procedure

Sets the Oracle Wallet used for all HTTP requests over Secured Socket Layer (SSL), that is, HTTPS

SET_TRANSFER_TIMEOUT Procedure

Sets the timeout value for UTL_HTTP to read the HTTP response from the Web server or proxy server

GET_TRANSFER_TIMEOUT Procedure

Retrieves the current network transfer timeout value

Table 96-8  UTL_HTTP Subprograms--HTTP Requests
Subprogram Description

BEGIN_REQUEST Function

Begins a new HTTP request. UTL_HTTP establishes the network connection to the target Web server or the proxy server and sends the HTTP request line.

SET_HEADER Procedure

Sets an HTTP request header. The request header is sent to the Web server as soon as it is set.

SET_AUTHENTICATION Procedure

Sets HTTP authentication information in the HTTP request header. The Web server needs this information to authorize the request.

SET_COOKIE_SUPPPORT Procedure

Enables or disables support for the HTTP cookies in the request.

SET_FOLLOW_REDIRECT Procedure

Sets the maximum number of times UTL_HTTP follows the HTTP redirect instruction in the HTTP response to this request in the GET_RESPONSE function.

SET_BODY_CHARSET Procedure

Sets the character set of the request body when the media type is text but the character set is not specified in the Content-Type header.

SET_PERSISTENT_CONN_SUPPORT Procedure

Enables or disables support for the HTTP 1.1 persistent-connection in the request.

WRITE_TEXT Procedure

Writes some text data in the HTTP request body.

WRITE_LINE Procedure

Writes a text line in the HTTP request body and ends the line with new-line characters (CRLF as defined in UTL_TCP).

WRITE_RAW Procedure

Writes some binary data in the HTTP request body.

END_REQUEST Procedure

Ends the HTTP request.

Table 96-9  UTL_HTTP Subprograms--HTTP Responses
Subprogram Description

GET_RESPONSE Function

Reads the HTTP response. When the function returns, the status line and the HTTP response headers have been read and processed.

GET_HEADER_COUNT Function

Returns the number of HTTP response headers returned in the response.

GET_HEADER Procedure

Returns the nth HTTP response header name and value returned in the response.

GET_HEADER_BY_NAME Procedure

Returns the HTTP response header value returned in the response given the name of the header.

GET_AUTHENTICATION Procedure

Retrieves the HTTP authentication information needed for the request to be accepted by the Web server as indicated in the HTTP response header.

SET_BODY_CHARSET Procedure

Sets the character set of the response body when the media type is "text" but the character set is not specified in the "Content-Type" header.

READ_TEXT Procedure

Reads the HTTP response body in text form and returns the output in the caller-supplied buffer.

READ_LINE Procedure

Reads the HTTP response body in text form until the end of line is reached and returns the output in the caller-supplied buffer.

READ_RAW Procedure

Reads the HTTP response body in binary form and returns the output in the caller-supplied buffer.

END_RESPONSE Procedure

Ends the HTTP response. It completes the HTTP request and response.

Table 96-10  UTL_HTTP Subprograms--HTTP Cookies
Subprogram Description

GET_COOKIE_COUNT Function

Returns the number of cookies currently maintained by the UTL_HTTP package set by all Web servers.

GET_COOKIES Function

Returns all the cookies currently maintained by the UTL_HTTP package set by all Web servers.

ADD_COOKIES Procedure

Adds the cookies maintained by UTL_HTTP.

CLEAR_COOKIES Procedure

Clears all cookies maintained by the UTL_HTTP package.

Table 96-11  UTL_HTTP Subprograms--HTTP Persistent Connections
Subprogram Description

GET_PERSISTENT_CONN_COUNT Function

Returns the number of network connections currently kept persistent by the UTL_HTTP package to the Web servers.

GET_PERSISTENT_CONNS Procedure

Returns all the network connections currently kept persistent by the UTL_HTTP package to the Web servers.

CLOSE_PERSISTENT_CONN Procedure

Closes an HTTP persistent connection maintained by the UTL_HTTP package in the current database session.

CLOSE_PERSISTENT_CONNS Procedure

Closes a group of HTTP persistent connections maintained by the UTL_HTTP package in the current database session.

Table 96-12  UTL_HTTP Subprograms--Error Conditions
Subprogram Description

GET_DETAILED_SQLCODE Function

Retrieves the detailed SQLCODE of the last exception raised.

GET_DETAILED_SQLERRM Function

Retrieves the detailed SQLERRM of the last exception raised.

Simple HTTP Fetches

REQUEST and REQUEST_PIECES take a string universal resource locator (URL), contact that site, and return the data (typically HTML) obtained from that site.

You should not expect REQUEST or REQUEST_PIECES to succeed in contacting a URL unless you can contact that URL by using a browser on the same machine (and with the same privileges, environment variables, and so on.)

If REQUEST or REQUEST_PIECES fails (for example, if it raises an exception, or if it returns an HTML-formatted error message, but you believe that the URL argument is correct), then try contacting that same URL with a browser to verify network availability from your machine. You may have a proxy server set in your browser that needs to be set with each REQUEST or REQUEST_PIECES call using the optional proxy parameter.


Note:

UTL_HTTP can also use environment variables to specify its proxy behavior. For example, on UNIX, setting the environment variable http_proxy to a URL uses that service as the proxy server for HTTP requests. Setting the environment variable no_proxy to a domain name does not use the HTTP proxy server for URLs in that domain. When the UTL_HTTP package is executed in the Oracle database server, the environment variables are the ones that are set when the database instance is started.


REQUEST Function

This function returns up to the first 2000 bytes of data retrieved from the given URL. This function can be used directly in SQL queries.

Syntax

UTL_HTTP.REQUEST (
   url              IN VARCHAR2,
   proxy            IN VARCHAR2 DEFAULT NULL), 
   wallet_path      IN VARCHAR2 DEFAULT NULL,
   wallet_password  IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2;

Pragmas

pragma restrict_references (request, wnds, rnds, wnps, rnps);

Parameters

Table 96-13 REQUEST Function Parameters
Parameter Description

url

Universal resource locator.

proxy

(Optional) Specifies a proxy server to use when making the HTTP request. See set_proxy for the full format of the proxy setting.

wallet_path

(Optional) Specifies a client-side wallet. The client-side wallet contains the list of trusted certificate authorities required for HTTPS request. The format of wallet_path on a PC is, for example, file:c:\WINNT\Profiles\<username>\WALLETS, and in Unix is, for example, file:/home/<username>/wallets

When the UTL_HTTP package is executed in the Oracle database server, the wallet is accessed from the database server. Therefore, the wallet path must be accessible from the database server. See set_wallet for a description on how to set up an Oracle wallet. Non-HTTPS requests do not require an Oracle wallet.

wallet_password

(Optional) Specifies the password required to open the wallet.

Returns

The return type is a string of length 2000 or less, which contains up to the first 2000 bytes of the HTML result returned from the HTTP request to the argument URL.

Exceptions

INIT_FAILED
REQUEST_FAILED

Usage Notes

The URL passed as an argument to this function is not examined for illegal characters, for example, spaces, according to URL specification RFC 2396. The caller should escape those characters with the UTL_URL package. See the comments of the package for the list of legal characters in URLs. Note that URLs should consist of US-ASCII characters only. The use of non-US-ASCII characters in a URL is generally unsafe.

Please see the documentation of the function set_wallet on the use of an Oracle wallet, which is required for accessing HTTPS Web servers.

Unless response error check is turned on, this function does not raise an exception when a 4xx or 5xx response is received from the Web server. Instead, it returns the formatted error message from the Web server:

<HTML> 
<HEAD> 
<TITLE>Error Message</TITLE> 
</HEAD> 
<BODY> 
<H1>Fatal Error 500</H1> 
Can't Access Document:  http://home.nothing.comm. 
<P> 
<B>Reason:</B> Can't locate remote host:  home.nothing.comm. 
<P> 
<P><HR> 
<ADDRESS><A HREF="http://www.w3.org"> 
CERN-HTTPD3.0A</A></ADDRESS> 
</BODY> 
</HTML> 

Example

SQLPLUS> SELECT utl_http.request('http://www.my-company.com/') FROM dual;
UTL_HTTP.REQUEST('HTTP://WWW.MY-COMPANY.COM/')                         
<html>
<head><title>My Company Home Page</title>
<!--changed Jan. 16, 19
1 row selected.

If you are behind a firewall, include the proxy parameter. For example, from within the Oracle firewall, where there might be a proxy server named www-proxy.my-company.com:

SQLPLUS> SELECT 
utl_http.request('http://www.my-company.com', 'www-proxy.us.my-company.com') 
FROM dual;

REQUEST_PIECES Function

This function returns a PL/SQL table of 2000-byte pieces of the data retrieved from the given URL.

Syntax

type html_pieces is table of varchar2(2000) index by binary_integer;

UTL_HTTP.REQUEST_PIECES (
   url             IN VARCHAR2,
   max_pieces      IN NATURAL DEFAULT 32767,
   proxy           IN VARCHAR2 DEFAULT NULL,
   wallet_path     IN VARCHAR2 DEFAULT NULL,
   wallet_password IN VARCHAR2 DEFAULT NULL)
RETURN html_pieces;

Pragmas

pragma restrict_references (request_pieces, wnds, rnds, wnps, rnps);

Parameters

Table 96-14 REQUEST_PIECES Function Parameters
Parameter Description

url

Universal resource locator.

max_pieces

(Optional) The maximum number of pieces (each 2000 characters in length, except for the last, which may be shorter), that REQUEST_PIECES should return. If provided, then that argument should be a positive integer.

proxy

(Optional) Specifies a proxy server to use when making the HTTP request. See set_proxy for the full format of the proxy setting.

wallet_path

(Optional) Specifies a client-side wallet. The client-side wallet contains the list of trusted certificate authorities required for HTTPS request. The format of wallet_path is 'file:/<local-dir-for-client-side-wallet>'.

The format of wallet_path on a PC is, for example, file:c:\WINNT\Profiles\<username>\WALLETS, and in Unix is, for example, file:/home/<username>/wallets. When the UTL_HTTP package is executed in the Oracle database server, the wallet is accessed from the database server. Therefore, the wallet path must be accessible from the database server.

See set_wallet for the description on how to set up an Oracle wallet. Non-HTTPS requests do not require an Oracle wallet.

wallet_password

(Optional) Specifies the password required to open the wallet.

Returns

REQUEST_PIECES returns a PL/SQL table of type UTL_HTTP.HTML_PIECES. Each element of that PL/SQL table is a string of maximum length 2000. The elements of the PL/SQL table returned by REQUEST_PIECES are successive pieces of the data obtained from the HTTP request to that URL.

Exceptions

INIT_FAILED
REQUEST_FAILED

Usage Notes

The URL passed as an argument to this function will not be examined for illegal characters, for example, spaces, according to URL specification RFC 2396. The caller should escape those characters with the UTL_URL package. See the comments of the package for the list of legal characters in URLs. Note that URLs should consist of US-ASCII characters only. The use of non-US-ASCII characters in a URL is generally unsafe.

Each entry of the PL/SQL table (the "pieces") returned by this function may not be filled to their fullest capacity. The function may start filling the data in the next piece before the previous "piece" is totally full.

Please see the documentation of the function set_wallet on the use of an Oracle wallet, which is required for accessing HTTPS Web servers.

Unless response error check is turned on, this function does not raise an exception when a 4xx or 5xx response is received from the Web server. Instead, it returns the formatted error message from the Web server:

<HTML> 
<HEAD> 
<TITLE>Error Message</TITLE> 
</HEAD> 
<BODY> 
<H1>Fatal Error 500</H1> 
Can't Access Document:  http://home.nothing.comm. 
<P> 
<B>Reason:</B> Can't locate remote host:  home.nothing.comm. 
<P> 
<P><HR> 
<ADDRESS><A HREF="http://www.w3.org"> 
CERN-HTTPD3.0A</A></ADDRESS> 
</BODY> 
</HTML>

Example

SET SERVEROUTPUT ON 


DECLARE 
   x   utl_http.html_pieces; 
   len PLS_INTEGER; 
BEGIN 
   x := utl_http.request_pieces('http://www.oracle.com/', 100); 
   dbms_output.put_line(x.count || ' pieces were retrieved.'); 
   dbms_output.put_line('with total length '); 
   IF x.count < 1 THEN 
      dbms_output.put_line('0'); 
  ELSE 
   len := 0; 
   FOR i in 1..x.count LOOP 
      len := len + length(x(i)); 
   END LOOP; 
   dbms_output.put_line(i); 
  END IF; 
END; 
/ 
-- Output 
Statement processed. 
4 pieces were retrieved. 
with total length 
7687 

Session Settings

Session settings manipulate the configuration and default behavior of UTL_HTTP when HTTP requests are executed within a database user session. When a request is created, it inherits the default settings of the HTTP cookie support, follow-redirect, body character set, persistent-connection support, and transfer timeout of the current session. Those settings can be changed later by calling the request API. When a response is created for a request, it inherits those settings from the request. Only the body character set can be changed later by calling the response API.

SET_PROXY Procedure

This procedure sets the proxy to be used for requests of the HTTP or other protocols, excluding those for hosts that belong to the domain specified in no_proxy_domains. The proxy may include an optional TCP/IP port number at which the proxy server listens. The syntax is [http://]host[:port][/], for example, www-proxy.my-company.com:80. If the port is not specified for the proxy, port 80 is assumed. no_proxy_domains is a comma-, semi-colon-, or space-separated list of domains or hosts for which HTTP requests should be sent directly to the destination HTTP server instead of going through a proxy server. Optionally, a port number can be specified for each domain or host. If the port number is specified, the no-proxy restriction is only applied to the request at the port of the particular domain or host, for example, corp.my-company.com, eng.my-company.com:80. When no_proxy_domains is NULL and the proxy is set, all requests go through the proxy. When the proxy is not set, UTL_HTTP sends requests to the target Web servers directly.

Syntax

UTL_HTTP.set_proxy (
   proxy             IN VARCHAR2,
   no_proxy_domains  IN VARCHAR2);

Parameters

Table 96-15 SET_PROXY Procedure Parameters
Parameter Description

proxy (IN)

The proxy (host and an optional port number) to be used by the UTL_HTTP package

no_proxy_domains (IN)

The list of hosts and domains for which no proxy should be used for all requests.

Usage Notes

If proxy settings are set when the database server instance is started, the proxy settings in the environment variables http_proxy and no_proxy are assumed. Proxy settings set by this procedure override the initial settings.

GET_PROXY Procedure

This procedure retrieves the current proxy settings.

Syntax

UTL_HTTP.get_proxy (
   proxy             OUT NOCOPY VARCHAR2, 
   no_proxy_domains  OUT NOCOPY VARCHAR2);

Parameters

Table 96-16 GET_PROXY Procedure Parameters
Parameter Description

proxy (OUT)

The proxy (host and an optional port number) currently used by the UTL_HTTP package

no_proxy_domains (OUT)

The list of hosts and domains for which no proxy is used for all requests.

SET_COOKIE_SUPPORT Procedure

This procedure sets:

If cookie support is enabled for an HTTP request, all cookies saved in the current session and applicable to the request are returned to the Web server in the request, in accordance with HTTP cookie specification standards. Cookies that are set in response to the request are saved in the current session for return to the Web server in subsequent requests, if cookie support is enabled for those requests. If cookie support is disabled for an HTTP request, no cookies will be returned to the Web server in the request and the cookies set in the response to the request are not saved in the current session, although the Set-Cookie HTTP headers can still be retrieved from the response.

Cookie support is enabled by default for all HTTP requests in a database user session. The default setting of the cookie support (enabled versus disabled) affects only the future requests and has no effect on the existing ones. After your request is created, the cookie support setting may be changed by using the other set_cookie_support procedure that operates on a request.

The default maximum number of cookies saved in the current session is 20 for each site and 300 total.

Syntax

UTL_HTTP.set_cookie_support (
   enable       IN BOOLEAN,
   max_cookies  IN PLS_INTEGER DEFAULT 300,
   max_cookies_per_site  IN PLS_INTEGER DEFAULT 20);

Parameters

Table 96-17 SET_COOKIE SUPPORT Procedure Parameters
Parameter Description

enable (IN)

Sets whether future HTTP requests should support HTTP cookies (TRUE) or not (FALSE)

max_cookies (IN)

Sets the maximum total number of cookies maintained in the current session

max_cookies_per_site (IN)

Sets the maximum number of cookies maintained in the current session for each Web site

Usage Notes

If you lower the maximum total number of cookies or the maximum number of cookies for each Web site, the oldest cookies will be purged first to reduce the number of cookies to the lowered maximum. HTTP cookies saved in the current session last for the duration of the database session only; there is no persistent storage for the cookies. Cookies saved in the current session are not cleared if you disable cookie support.

See "UTL_HTTP Examples" for how to use get_cookies and add_cookies to retrieve, save, and restore cookies.

GET_COOKIE_SUPPORT Procedure

This procedure retrieves the current cookie support settings.

Syntax

UTL_HTTP.get_cookie_support (
   enable                OUT BOOLEAN,
   max_cookies           OUT PLS_INTEGER,
   max_cookies_per_site  OUT PLS_INTEGER);

Parameters

Table 96-18 GET_COOKIE SUPPORT Procedure Parameters
Parameter Description

enable (OUT)

Indicates whether future HTTP requests should support HTTP cookies (TRUE) or not (FALSE)

max_cookies (OUT)

Indicates the maximum total number of cookies maintained in the current session

max_cookies_per_site (OUT)

Indicates the maximum number of cookies maintained in the current session for each Web site

SET_FOLLOW_REDIRECT Procedure

This procedure sets the maximum number of times UTL_HTTP follows the HTTP redirect instruction in the HTTP responses to future requests in the get_response function.

If max_redirects is set to a positive number, get_response will automatically follow the redirected URL for the HTTP response status code 301, 302, and 307 for the HTTP HEAD and GET methods, and 303 for all HTTP methods, and retry the HTTP request (the request method will be changed to HTTP GET for the status code 303) at the new location. It follows the redirection until the final, non-redirect location is reached, or an error occurs, or the maximum number of redirections has been reached (to prevent an infinite loop). The URL and method fields in the REQ record will be updated to the last redirected URL and the method used to access the URL. Set the maximum number of redirects to zero to disable automatic redirection.

The default maximum number of redirections in a database user session is 3. The default value affects only future requests and has no effect on existing requests.

After a request is created, the maximum number of redirections can be changed by using the other set_follow_redirect procedure that operates on a request.

Syntax

UTL_HTTP.set_follow_redirect (
   max_redirects  IN PLS_INTEGER DEFAULT 3);

Parameters

Table 96-19 SET_FOLLOW_REDIRECT Procedure Parameters
Parameter Description

max_redirects (IN)

The maximum number of redirections. Set to zero to disable redirection

Usage Notes

While it is set not to follow redirect automatically in the current session, it is possible to specify individual HTTP requests to follow redirect instructions the function follow_redirect and vice versa.

GET_FOLLOW_REDIRECT Procedure

This procedure retrieves the follow-redirect setting in the current session.

Syntax

UTL_HTTP.get_follow_redirect (
   max_redirects  OUT PLS_INTEGER);

Parameters

Table 96-20 GET_FOLLOW_REDIRECT Procedure Parameters
Parameter Description

max_redirects (OUT)

The maximum number of redirections for all future HTTP requests.

SET_BODY_CHARSET Procedure

This procedure sets the default character set of the body of all future HTTP requests when the media type is text and the character set is not specified in the Content-Type header. Following the HTTP protocol standard specification, if the media type of a request or a response is text, but the character set information is missing in the Content-Type header, the character set of the request or response body should default to ISO-8859-1. A response created for a request inherits the default body character set of the request instead of the body character set of the current session.

The default body character set is ISO-8859-1 in a database user session. The default body character set setting affects only future requests and has no effect on existing requests.

After a request is created, the body character set can be changed by using the other set_body_charset procedure that operates on a request.

Syntax

UTL_HTTP.set_body_charset (
   charset  IN VARCHAR2 DEFAULT NULL);

Parameters

Table 96-21 SET_BODY_CHARSET Procedure Parameters
Parameter Description

charset (IN)

The default character set of the request body. The character set can be in Oracle or Internet Assigned Numbers Authority (IANA) naming convention. If charset is NULL, the database character set is assumed.

GET_BODY_CHARSET Procedure

This procedure retrieves the default character set of the body of all future HTTP requests.

Syntax

UTL_HTTP.get_body_charset (
   charset  OUT NOCOPY VARCHAR2);

Parameters

Table 96-22 GET_BODY_CHARSET Procedure Parameters
Parameter Description

charset (OUT)

The default character set of the body of all future HTTP requests

SET_PERSISTENT_CONN_SUPPORT Procedure

This procedure sets:

If persistent-connection support is enabled for an HTTP request, the package keeps the network connections to a Web server or the proxy server open in the package after the request is completed. A subsequent request to the same server can use the HTTP 1.1 persistent connection. With persistent connection support, subsequent HTTP requests can be completed faster because network connection latency is avoided. If the persistent-connection support is disabled for a request, the package will send the HTTP header Connection: close automatically in the HTTP request and close the network connection when the request is completed. This setting has no effect on HTTP requests that follows HTTP 1.0 protocol, for which the network connections will always be closed after the requests are completed.

When a request is made, the package always attempts to reuse an existing persistent connection to the target Web server (or proxy server) if one is available. If none is available, a new network connection will be initiated. The persistent-connection support setting for a request affects only whether the network connection should be closed after a request completes.

Persistent-connection support is disabled for all HTTP requests in a database user session by default. The default maximum number of persistent connections saved in the current session is zero. The default setting of the persistent-connection support (enabled versus disabled) affects only future requests and has no effect on existing requests.

After a request is created, the persistent-connection support setting can be changed by using the other set_persistent_conn_support procedure that operates on a request.

While the use of persistent connections in UTL_HTTP can reduce the time it takes to fetch multiple Web pages from the same server, it consumes system resources (network connections) in the database server. Excessive use of persistent connections can reduce the scalability of the database server when too many network connections are kept open in the database server. Network connections should be kept open only if they will be used immediately by subsequent requests and should be closed when they are no longer needed. You should normally disable persistent connection support in the session and enable persistent connections in individual HTTP requests, as shown in "Example: Using SET_PERSISTENT_CONN_SUPPORT".

Syntax

UTL_HTTP.set_persistent_conn_support (
   enable     IN BOOLEAN,
   max_conns  IN PLS_INTEGER DEFAULT 0);

Parameters

Table 96-23 SET_PERSISTENT_CONN_SUPPORT Procedure Parameters
Parameter Description

enable (IN)

Enables (set to TRUE) or disables (set to FALSE) persistent connection support

max_conns (IN)

Sets the maximum number of persistent connections maintained in the current session.

Usage Notes

The default value of the maximum number of persistent connections in a database session is zero. To truly enable persistent connections, you must also set the maximum number of persistent connections to a positive value or no connections will be kept persistent.

Example: Using SET_PERSISTENT_CONN_SUPPORT

DECLARE
  TYPE vc2_table IS TABLE OF VARCHAR2(256) INDEX BY binary_integer;
  paths vc2_table;

  PROCEDURE fetch_pages(paths IN vc2_table) AS
    url_prefix VARCHAR2(256) := 'http://www.my-company.com/';
    req   utl_http.req;
    resp  utl_http.resp;
    data  VARCHAR2(1024);
  BEGIN
    FOR i IN 1..paths.count LOOP
      req := utl_http.begin_request(url_prefix || paths(i));

      -- Use persistent connection except for the last request
      IF (i < paths.count) THEN
        utl_http.set_persistent_conn_support(req, TRUE);
      END IF;
  
      resp := utl_http.get_response(req);
  
      BEGIN
        LOOP
          utl_http.read_text(resp, data);
          -- do something with the data
        END LOOP;
      EXCEPTION
        WHEN utl_http.end_of_body THEN
          NULL;
      END;
      utl_http.end_response(resp);
    END LOOP;
  END;

BEGIN
  utl_http.set_persistent_conn_support(FALSE, 1);
  paths(1) := '...';
  paths(2) := '...';
  ...   
  fetch_pages(paths);
END;

GET_PERSISTENT_CONN_SUPPORT Procedure

This procedure checks:

Syntax

UTL_HTTP.get_persistent_conn_support (
   enable     OUT BOOLEAN,
   max_conns  OUT PLS_INTEGER);

Parameters

Table 96-24 GET_PERSISTENT_CONN_SUPPORT Procedure Parameters
Parameter Description

enable (OUT)

TRUE if persistent connection support is enabled; otherwise FALSE

max_conns (OUT)

the maximum number of persistent connections maintained in the current session.

SET_RESPONSE_ERROR_CHECK Procedure

This procedure sets whether or not get_response raises an exception when the Web server returns a status code that indicates an error--a status code in the 4xx or 5xx ranges. For example, when the requested URL is not found in the destination Web server, a 404 (document not found) response status code is returned. If the status code indicates an error--a 4xx or 5xx code--and this procedure is enabled, get_response will raise the HTTP_CLIENT_ERROR or HTTP_SERVER_ERROR exception. If SET_RESPONSE_ERROR_CHECK is set to FALSE, get_response will not raise an exception when the status code indicates an error. Response error check is turned off by default.

Syntax

UTL_HTTP.set_response_error_check (
   enable  IN BOOLEAN DEFAULT FALSE);

Parameters

Table 96-25 SET_RESPONSE_ERROR_CHECK Procedure Parameters
Parameter Description

enable (IN)

TRUE to check for response errors; otherwise FALSE

Usage Notes

The get_response function can raise other exceptions when SET_RESPONSE_ERROR_CHECK is set to FALSE.

GET_RESPONSE_ERROR_CHECK Procedure

This procedure checks if the response error check is set or not.

Syntax

UTL_HTTP.get_response_error_check (
   enable  OUT BOOLEAN);

Parameters

Table 96-26 GET_RESPONSE_ERROR_CHECK Procedure Parameters
Parameter Description

enable (OUT)

TRUE if the response error check is set; otherwise FALSE

SET_DETAILED_EXCP_SUPPORT Procedure

This procedure sets the UTL_HTTP package to raise a detailed exception. By default, UTL_HTTP raises the request_failed exception when an HTTP request fails. Use GET_DETAILED_SQLCODE and GET_DETAILED_SQLEERM for more detailed information about the error.

Syntax

UTL_HTTP.set_detailed_excp_support (
   enable  IN BOOLEAN DEFAULT FALSE);

Parameters

Table 96-27 SET_DETAILED_EXCP_SUPPORT Procedure Parameters
Parameter Description

enable (IN)

Asks UTL_HTTP to raise a detailed exception directly if set to TRUE; otherwise FALSE

GET_DETAILED_EXCP_SUPPORT Procedure

This procedure checks if the UTL_HTTP package will raise a detailed exception or not.

Syntax

UTL_HTTP.get_detailed_excp_support (
   enable  OUT BOOLEAN);

Parameters

Table 96-28 GET_DETAILED_EXCP_SUPPORT Procedure Parameters
Parameter Description

enable (OUT)

TRUE if UTL_HTTP raises a detailed exception; otherwise FALSE

SET_WALLET Procedure

This procedure sets the Oracle wallet used for all HTTP requests over Secured Socket Layer (SSL), namely HTTPS. When the UTL_HTTP package communicates with an HTTP server over SSL, the HTTP server presents its digital certificate, which is signed by a certificate authority, to the UTL_HTTP package for identification purpose. The Oracle wallet contains the list of certificate authorities that are trusted by the user of the UTL_HTTP package. An Oracle wallet is required to make an HTTPS request.

To set up an Oracle wallet, use the Oracle Wallet Manager to create a wallet. In order for the HTTPS request to succeed, the certificate authority that signs the certificate of the remote HTTPS Web server must be one trust point set in the wallet. When a wallet is created, it is populated with a set of well-known certificate authorities as trust points. If the certificate authority that signs the certificate of the remote HTTPS Web server is not among the trust points, or the certificate authority has new root certificates, you should obtain the root certificate of that certificate authority and install it as a trust point in the wallet using Oracle Wallet Manager.

See Also:

Oracle Advanced Security Administrator's Guide for more information on Wallet Manager

Syntax

UTL_HTTP.set_wallet (
   path      IN VARCHAR2,
   password  IN VARCHAR2 DEFAULT NULL);

Parameters

Table 96-29 SET_WALLET Procedure Parameters
Parameter Description

path (IN)

The directory path that contains the Oracle wallet. The format is file:<directory-path>.

The format of wallet_path on a PC is, for example, file:c:\WINNT\Profiles\<username>\WALLETS, and in Unix is, for example, file:/home/<username>/wallets. When the UTL_HTTP package is executed in the Oracle database server, the wallet is accessed from the database server. Therefore, the wallet path must be accessible from the database server.

password (IN)

The password needed to open the wallet. A second copy of a wallet in a wallet directory that may be opened without a password. That second copy of the wallet is read-only. If the password is NULL, the UTL_HTTP package will open the second, read-only copy of the wallet instead.

SET_TRANSFER_TIMEOUT Procedure

Sets the default timeout value for all future HTTP requests that the UTL_HTTP package should attempt while reading the HTTP response from the Web server or proxy server. This timeout value may be used to avoid the PL/SQL programs from being blocked by busy Web servers or heavy network traffic while retrieving Web pages from the Web servers. The default value of the timeout is 60 seconds.

Syntax

UTL_HTTP.set_transfer_timeout (
   timeout  IN PLS_INTEGER DEFAULT 60);

Parameters

Table 96-30 SET_TRANSFER_TIMEOUT Procedure Parameters
Parameter Description

TIMEOUT (IN)

The network transfer timeout value in seconds.

GET_TRANSFER_TIMEOUT Procedure

This procedure retrieves the default timeout value for all future HTTP requests.

Syntax

UTL_HTTP.get_transfer_timeout (
   timeout  OUT PLS_INTEGER);

Parameters

Table 96-31 GET_TRANSFER_TIMEOUT Procedure Parameters
Parameter Description

TIMEOUT (OUT)

The network transfer timeout value in seconds.

HTTP Requests

The following APIs begin an HTTP request, manipulate attributes, and send the request information to the Web server. When a request is created, it inherits the default settings of the HTTP cookie support, follow-redirect, body character set, persistent-connection support, and transfer timeout of the current session. The settings can be changed by calling the request API.

BEGIN_REQUEST Function

This functions begins a new HTTP request. UTL_HTTP establishes the network connection to the target Web server or the proxy server and sends the HTTP request line. The PL/SQL program continues the request by calling some other API to complete the request.

Syntax

UTL_HTTP.begin_request (
   url           IN VARCHAR2,
   method        IN VARCHAR2 DEFAULT 'GET',
   http_version  IN VARCHAR2 DEFAULT NULL)
RETURN req;

Parameters

Table 96-32 BEGIN_REQUEST Function Parameters
Parameter Description

url (IN)

The URL of the HTTP request

method (IN)

The method performed on the resource identified by the URL

http_version (IN)

The HTTP protocol version that sends the request. The format of the protocol version is HTTP/major-version.minor-version, where major-version and minor-version are positive numbers. If this parameter is set to NULL, UTL_HTTP uses the latest HTTP protocol version that it supports to send the request. The latest version that the package supports is 1.1 and it can be upgraded to a later version. The default is NULL.

Usage Notes

The URL passed as an argument to this function is not examined for illegal characters, such as spaces, according to URL specification RFC 2396. You should escape those characters with the UTL_URL package to return illegal and reserved characters. URLs should consist of US-ASCII characters only. See Chapter 102, "UTL_URL" for a list of legal characters in URLs. Note that URLs should consist of US-ASCII characters only. The use of non-US-ASCII characters in a URL is generally unsafe.

An Oracle wallet must be set before accessing Web servers over HTTPS. See the set_wallet procedure on how to set up an Oracle wallet.

SET_HEADER Procedure

This procedure sets an HTTP request header. The request header is sent to the Web server as soon as it is set.

Syntax

UTL_HTTP.set_header (
   r      IN OUT NOCOPY req,
   name   IN VARCHAR2,
   value  IN VARCHAR2);

Parameters

Table 96-33 SET_HEADER Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP request

name (IN)

The name of the HTTP request header

value (IN)

The value of the HTTP request header

Usage Notes

Multiple HTTP headers with the same name are allowed in the HTTP protocol standard. Therefore, setting a header does not replace a prior header with the same name.

If the request is made using HTTP 1.1, UTL_HTTP sets the Host header automatically for you.

When you set the Content-Type header with this procedure, UTL_HTTP looks for the character set information in the header value. If the character set information is present, it is set as the character set of the request body. It can be overridden later by using the set_body_charset procedure.

When you set the Transfer-Encoding header with the value chunked, UTL_HTTP automatically encodes the request body written by the write_text, write_line and write_raw procedures. Note that some HTTP-1.1-based Web servers or CGI programs do not support or accept the request body encoding in the HTTP 1.1 chunked transfer-encoding format.

SET_AUTHENTICATION Procedure

This procedure sets HTTP authentication information in the HTTP request header. The Web server needs this information to authorize the request.

Syntax

UTL_HTTP.set_authentication(
   r  IN OUT NOCOPY req,
   username  IN VARCHAR2,
   password  IN VARCHAR2,
   scheme    IN VARCHAR2 DEFAULT 'Basic',
   for_proxy IN BOOLEAN  DEFAULT FALSE);

Parameters

Table 96-34 SET_AUTHENTICATION Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP request

username (IN)

The username for the HTTP authentication

password (IN)

The password for the HTTP authentication

scheme (IN)

The HTTP authentication scheme. The default, BASIC, denotes the HTTP Basic Authentication scheme.

for_proxy (IN)

Identifies if the HTTP authentication information is for access to the HTTP proxy server instead of the Web server. Default is FALSE.

Usage Notes

Only the HTTP Basic Authentication scheme is supported.

SET_COOKIE_SUPPPORT Procedure

This procedure enables or disables support for the HTTP cookies in the request. If cookie support is enabled for an HTTP request, all cookies saved in the current session and applicable to the request are returned to the Web server in the request in accordance with HTTP cookie specification standards. Cookies set in the response to the request are saved in the current session for return to the Web server in the subsequent requests if cookie support is enabled for those requests. If the cookie support is disabled for an HTTP request, no cookies are returned to the Web server in the request and the cookies set in the response to the request are not saved in the current session, although the Set-Cookie HTTP headers can still be retrieved from the response.

Use this procedure to change the cookie support setting a request inherits from the session default setting.

Syntax

UTL_HTTP.set_cookie_support(
   r       IN OUT NOCOPY req,
   enable  IN BOOLEAN DEFAULT TRUE);

Parameters

Table 96-35 SET_COOKIE_SUPPORT Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP request

enable (IN)

Set enable to TRUE to enable HTTP cookie support; FALSE to disable

Usage Notes

HTTP cookies saved in the current session will last only for the duration of the database session; there is no persistent storage for the cookies. See "UTL_HTTP Examples" for how to use get_cookies and add_cookies to retrieve, save, and restore cookies.

SET_FOLLOW_REDIRECT Procedure

This procedure sets the maximum number of times UTL_HTTP follows the HTTP redirect instruction in the HTTP response to this request in the GET_RESPONSE function.

If max_redirects is set to a positive number, GET_RESPONSE will automatically follow the redirected URL for the HTTP response status code 301, 302, and 307 for the HTTP HEAD and GET methods, and 303 for all HTTP methods, and retry the HTTP request (the request method will be changed to HTTP GET for the status code 303) at the new location. It follows the redirection until the final, non-redirect location is reached, or an error occurs, or the maximum number of redirections has been reached (to prevent an infinite loop). The url and method fields in the REQ record are updated to the last redirected URL and the method used to access the URL. Set the maximum number of redirects to zero to disable automatic redirection.

Use this procedure to change the maximum number of redirections a request inherits from the session default setting.

Syntax

UTL_HTTP.set_follow_redirect(
   r              IN OUT NOCOPY req,
   max_redirects  IN PLS_INTEGER DEFAULT 3);

Parameters

Table 96-36 SET_FOLLOW_REDIRECT Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP request

max_redirects (IN)

The maximum number of redirects. Set to zero to disable redirects.

Usage Notes

The SET_FOLLOW_REDIRECT procedure must be called before GET_RESPONSE for any redirection to take effect.

SET_BODY_CHARSET Procedure

This procedure sets the character set of the request body when the media type is text but the character set is not specified in the Content-Type header. According to the HTTP protocol standard specification, if the media type of a request or a response is "text" but the character set information is missing in the "Content-Type" header, the character set of the request or response body should default to "ISO-8859-1".

Use this procedure to change the default body character set a request inherits from the session default setting.

Syntax

UTL_HTTP.set_body_charset(
   r        IN OUT NOCOPY req,
   charset  IN VARCHAR2 DEFAULT NULL);

Parameters

Table 96-37 SET_BODY_CHARSET Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP request

charset (IN)

The default character set of the request body. The character set can be in Oracle or Internet Assigned Numbers Authority (IANA) naming convention. If charset is NULL, the database character set is assumed.

SET_PERSISTENT_CONN_SUPPORT Procedure

This procedure enables or disables support for the HTTP 1.1 persistent-connection in the request.

If the persistent-connection support is enabled for an HTTP request, the package will keep the network connections to a Web server or the proxy server open in the package after the request is completed properly for a subsequent request to the same server to reuse for each HTTP 1.1 protocol specification. With the persistent connection support, subsequent HTTP requests may be completed faster because the network connection latency is avoided. If the persistent-connection support is disabled for a request, the package will always send the HTTP header "Connection: close" automatically in the HTTP request and close the network connection when the request is completed. This setting has no effect on HTTP requests that follows HTTP 1.0 protocol, for which the network connections will always be closed after the requests are completed.

When a request is being made, the package attempts to reuse an existing persistent connection to the target Web server (or proxy server) if one is available. If none is available, a new network connection will be initiated. The persistent-connection support setting for a request affects only whether the network connection should be closed after a request completes.

Use this procedure to change the persistent-connection support setting a request inherits from the session default setting.

Users should note that while the use of persistent connections in UTL_HTTP may reduce the time it takes to fetch multiple Web pages from the same server, it consumes precious system resources (network connections) in the database server. Also, excessive use of persistent connections may reduce the scalability of the database server when too many network connections are kept open in the database server. Network connections should be kept open only if they will be used immediately by subsequent requests and should be closed immediately when they are no longer needed. Set the default persistent connection support as disabled in the session, and enable persistent connection in individual HTTP requests as shown in "Example: Using SET_PERSISTENT_CONN_SUPPORT in HTTP Requests".

Syntax

UTL_HTTP.set_persistent_conn_support(
   r       IN OUT NOCOPY req,
   enable  IN BOOLEAN DEFAULT FALSE);

Parameters

Table 96-38 SET_PERSISTENT_CONN_SUPPORT Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP request

enable (IN)

TRUE to keep the network connection persistent. FALSE otherwise.

Usage Notes

The default value of the maximum number of persistent connections in a database session is zero. To truly enable persistent connections, you must also set the maximum number of persistent connections to a positive value or no connections will be kept persistent.

Example: Using SET_PERSISTENT_CONN_SUPPORT in HTTP Requests

DECLARE
  TYPE vc2_table IS TABLE OF VARCHAR2(256) INDEX BY binary_integer;
  paths vc2_table;

UTL_HTTP.fetch_pages(paths IN vc2_table) AS
    url_prefix VARCHAR2(256) := 'http://www.my-company.com/';
    req   utl_http.req;
    resp  utl_http.resp;
    data  VARCHAR2(1024);
  BEGIN
    FOR i IN 1..paths.count LOOP
      req := utl_http.begin_request(url_prefix || paths(i));

      -- Use persistent connection except for the last request
      IF (i < paths.count) THEN
        utl_http.set_persistent_conn_support(req, TRUE);
      END IF;
  
      resp := utl_http.get_response(req);
  
      BEGIN
        LOOP
          utl_http.read_text(resp, data);
          -- do something with the data
        END LOOP;
      EXCEPTION
        WHEN utl_http.end_of_body THEN
          NULL;
      END;
      utl_http.end_response(resp);
    END LOOP;
  END;

BEGIN
  utl_http.set_persistent_conn_support(FALSE, 1);
  paths(1) := '...';
  paths(2) := '...';
  ...   
  fetch_pages(paths);
END;

WRITE_TEXT Procedure

This procedure writes some text data in the HTTP request body. As soon as some data is sent as the HTTP request body, the HTTP request headers section is completed. Text data is automatically converted from the database character set to the request body character set.

Syntax

UTL_HTTP.write_text(
   r     IN OUT NOCOPY req,
   data  IN VARCHAR2);

Parameters

Table 96-39 WRITE_TEXT Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP request

data (IN)

The text data to send in the HTTP request body

Usage Notes

An HTTP client must always let the remote Web server know the length of the request body it is sending. If the amount of data is known beforehand, you can set the Content-Length header in the request, where the length of the content is measured in bytes instead of characters. If the length of the request body is not known beforehand, you can send the request body using the HTTP 1.1 chunked transfer-encoding format. The request body is sent in chunks, where the length of each chunk is sent before the chunk is sent. UTL_HTTP performs chunked transfer-encoding on the request body transparently when the Transfer-Encoding: chunked header is set. Note that some HTTP-1.1-based Web servers or CGI programs do not support or accept the request body encoding in the HTTP 1.1 chunked transfer-encoding format. See the set_header procedure for details.

If you send the Content-Length header, you should note that the length specified in the header should be the byte-length of the textual request body after it is converted from the database character set to the request body character set. When either one of the two character sets is a multibyte character set, the precise byte-length of the request body in the request body character set cannot be known beforehand. In this case, you can perform the character set conversion explicitly, determine the byte-length of the results, send the Content-Length header, and the results using the write_raw procedure to avoid the automatic character set conversion. Or, if the remove Web server or CGI programs allow, you can send the request body using the HTTP 1.1 chunked transfer-encoding format, where UTL_HTTP handles the length of the chunks transparently.

WRITE_LINE Procedure

This procedure writes a text line in the HTTP request body and ends the line with new-line characters (CRLF as defined in UTL_TCP). As soon as some data is sent as the HTTP request body, the HTTP request headers section is completed. Text data is automatically converted from the database character set to the request body character set.

Syntax

UTL_HTTP.write_line(
   r     IN OUT NOCOPY req,
   data  IN VARCHAR2);

Parameters

Table 96-40 WRITE_LINE Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP request

data (IN)

The text line to send in the HTTP request body

Usage Notes

An HTTP client must always let the remote Web server know the length of the request body it is sending. If the amount of data is known beforehand, you can set the Content-Length header in the request, where the length of the content is measured in bytes instead of characters. If the length of the request body is not known beforehand, you can send the request body using the HTTP 1.1 chunked transfer-encoding format. The request body is sent in chunks, where the length of each chunk is sent before the chunk is sent. The UTL_HTTP package performs chunked transfer-encoding on the request body transparently when the Transfer-Encoding: chunked header is set. Note that some HTTP-1.1-based Web servers or CGI programs do not support or accept the request body encoding in the HTTP 1.1 chunked transfer-encoding format. See the set_header procedure for details.

If you send the Content-Length header, you should note that the length specified in the header should be the byte-length of the textual request body after it is converted from the database character set to the request body character set. When either one of the two character sets is a multibyte character set, the precise byte-length of the request body in the request body character set cannot be known beforehand. In this case, you can perform the character set conversion explicitly, determine the byte-length of the results, send the Content-Length header, and the results using the write_raw procedure to avoid the automatic character set conversion. Or, if the remove Web server or CGI programs allow, you can send the request body using the HTTP 1.1 chunked transfer-encoding format, where UTL_HTTP handles the length of the chunks transparently.

WRITE_RAW Procedure

This procedure writes some binary data in the HTTP request body. As soon as some data is sent as the HTTP request body, the HTTP request headers section is completed.

Syntax

UTL_HTTP.write_raw(
   r     IN OUT NOCOPY req,
   data  IN RAW);

Parameters

Table 96-41 WRITE_RAW Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP request

data (IN)

The binary data to send in the HTTP request body

Usage Notes

An HTTP client must always let the remote Web server know the length of the request body it is sending. If the amount of data is known beforehand, you can set the Content-Length header in the request, where the length of the content is measured in bytes instead of characters. If the length of the request body is not known beforehand, you can send the request body using the HTTP 1.1 chunked transfer-encoding format. The request body is sent in chunks, where the length of each chunk is sent before the chunk is sent. UTL_HTTP performs chunked transfer-encoding on the request body transparently when the Transfer-Encoding: chunked header is set. Note that some HTTP-1.1-based Web servers or CGI programs do not support or accept the request body encoding in the HTTP 1.1 chunked transfer-encoding format. See the set_header procedure for details.

END_REQUEST Procedure

This procedure ends the HTTP request. To terminate the HTTP request without completing the request and waiting for the response, the program can call this procedure. Otherwise, the program should go through the normal sequence of beginning a request, getting the response, and closing the response. The network connection will always be closed and will not be reused.

Syntax

UTL_HTTP.end_request (
   r  IN OUT NOCOPY req);

Parameters

Table 96-42 END_REQUEST Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP request

HTTP Responses

The following APIs manipulate an HTTP response obtained from GET_RESPONSE and receive response information from the Web server. When a response is created for a request, it inherits settings of the HTTP cookie support, follow-redirect, body character set, persistent-connection support, and transfer timeout from the request. Only the body character set can be changed by calling the response API.

GET_RESPONSE Function

This function reads the HTTP response. When the function returns, the status line and the HTTP response headers have been read and processed. The status code, reason phrase, and the HTTP protocol version are stored in the response record. This function completes the HTTP headers section.

Syntax

UTL_HTTP.get_response (
   r  IN OUT NOCOPY req) 
RETURN resp;

Parameters

Table 96-43 GET_RESPONSE Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP response

GET_HEADER_COUNT Function

This function returns the number of HTTP response headers returned in the response.

Syntax

UTL_HTTP.get_header_count (
   r  IN OUT NOCOPY resp) 
RETURN PLS_INTEGER;

Parameters

Table 96-44 GET_HEADER_COUNT Function Parameters
Parameter Description

r (IN/OUT)

The HTTP response

Usage Notes

If the response body returned by the remote Web server is encoded in chunked transfer encoding format, the trailer headers that are returned at the end of the response body will be added to the response, and the response header count will be updated. You can retrieve the additional headers after the end of the response body is reached and before you end the response.

GET_HEADER Procedure

This procedure returns the nth HTTP response header name and value returned in the response.

Syntax

UTL_HTTP.get_header (
   r      IN OUT NOCOPY resp,
   n      IN PLS_INTEGER,
   name   OUT NOCOPY VARCHAR2,
   value  OUT NOCOPY VARCHAR2);

Parameters

Table 96-45 GET_HEADER Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP response.

n (IN)

The nth header to return.

name (OUT)

The name of the HTTP response header.

value (OUT)

The value of the HTTP response header.

Usage Notes

If the response body returned by the remote Web server is encoded in chunked transfer encoding format, the trailer headers that are returned at the end of the response body will be added to the response, and the response header count will be updated. You can retrieve the additional headers after the end of the response body is reached and before you end the response.

GET_HEADER_BY_NAME Procedure

This procedure returns the HTTP response header value returned in the response given the name of the header.

Syntax

UTL_HTTP.get_header_by_name(
   r      IN OUT NOCOPY resp,
   name   IN VARCHAR2,
   value  OUT NOCOPY VARCHAR2,
   n      IN PLS_INTEGER DEFAULT 1);

Parameters

Table 96-46 GET_HEADER_BY_NAME Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP response

n (IN)

The nth occurrence of an HTTP response header by the specified name to return. The default is 1.

name (IN)

The name of the HTTP response header for which the value is to return

value (OUT)

The value of the HTTP response header.

Usage Notes

If the response body returned by the remote Web server is encoded in chunked transfer encoding format, the trailer headers that are returned at the end of the response body will be added to the response, and the response header count will be updated. You can retrieve the additional headers after the end of the response body is reached and before you end the response.

GET_AUTHENTICATION Procedure

This procedure retrieves the HTTP authentication information needed for the request to be accepted by the Web server as indicated in the HTTP response header.

Syntax

UTL_HTTP.get_authentication(
   r          IN OUT NOCOPY resp,
   scheme     OUT VARCHAR2,
   realm      OUT VARCHAR2,
   for_proxy  IN BOOLEAN  DEFAULT FALSE);

Parameters

Table 96-47 GET_AUTHENTICATION Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP response.

scheme (OUT)

The scheme for the required HTTP authentication

realm (OUT)

The realm for the required HTTP authentication

for_proxy (IN)

Returns the HTTP authentication information required for the access to the HTTP proxy server instead of the Web server? Default is FALSE.

Usage Notes

When a Web client is unaware that a document is protected, at least two HTTP requests are required for the document to be retrieved. In the first HTTP request, the Web client makes the request without supplying required authentication information; so the request is denied. The Web client can determine the authentication information required for the request to be authorized by calling get_authentication. The Web client makes the second request and supplies the required authentication information with set_authorization. If the authentication information can be verified by the Web server, the request will succeed and the requested document is returned. Before making the request, if the Web client knows that authentication information is required, it can supply the required authentication information in the first request, thus saving an extra request.

SET_BODY_CHARSET Procedure

This procedure sets the character set of the response body when the media type is "text" but the character set is not specified in the "Content-Type" header. For each the HTTP protocol standard specification, if the media type of a request or a response is "text" but the character set information is missing in the "Content-Type" header, the character set of the request or response body should default to "ISO-8859-1".

Use this procedure to change the default body character set a response inherits from the request.

Syntax

UTL_HTTP.set_body_charset(
   r        IN OUT NOCOPY resp,
   charset  IN VARCHAR2 DEFAULT NULL);

Parameters

Table 96-48 SET_BODY_CHARSET Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP response.

charset (IN)

The default character set of the response body. The character set can be in Oracle or Internet Assigned Numbers Authority (IANA) naming convention. If charset is NULL, the database character set is assumed.

READ_TEXT Procedure

This procedure reads the HTTP response body in text form and returns the output in the caller-supplied buffer. The end_of_body exception will be raised if the end of the HTTP response body is reached. Text data is automatically converted from the response body character set to the database character set.

Syntax

UTL_HTTP.read_text(
   r     IN OUT NOCOPY resp,
   data  OUT NOCOPY VARCHAR2,
   len   IN PLS_INTEGER DEFAULT NULL);

Parameters

Table 96-49 READ_TEXT Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP response.

data (OUT)

The HTTP response body in text form

len (IN)

The maximum number of characters of data to read. If len is NULL, this procedure will read as much input as possible to fill the buffer allocated in data. The actual amount of data returned may be less than that specified if little data is available before the end of the HTTP response body is reached or the transfer_timeout amount of time has elapsed. The default is NULL.

Usage Notes

The UTL_HTTP package supports HTTP 1.1 chunked transfer-encoding. When the response body is returned in chunked transfer-encoding format as indicated in the response header, the package automatically decodes the chunks and returns the response body in de-chunked format.

If transfer timeout is set in the request of this response, read_text waits for each data packet to be ready to read until timeout occurs. If it occurs, this procedure stops reading and returns all the data read successfully. If no data is read successfully, the transfer_timeout exception is raised. The exception can be handled and the read operation can be retried later.

If a partial multibyte character is found at the end of the response body, read_text stops reading and returns all the complete multibyte characters read successfully. If no complete character is read successfully, the partial_multibyte_char exception is raised. The exception can be handled and the bytes of that partial multibyte character can be read as binary by the read_raw procedure. If a partial multibyte character is seen in the middle of the response body because the remaining bytes of the character have not arrived and read timeout occurs, the transfer_timeout exception is raised instead. The exception can be handled and the read operation can be retried later.

When the "Content-Type" response header specifies the character set of the response body and the character set is unknown or unsupported by Oracle, the "ORA-01482: unsupported character set" exception is raised if you try to read the response body as text. You can either read the response body as binary using the READ_RAW procedure, or set the character set of the response body explicitly using the SET_BODY_CHARSET procedure and read the response body as text again.

READ_LINE Procedure

This procedure reads the HTTP response body in text form until the end of line is reached and returns the output in the caller-supplied buffer. The end of line is as defined in the function read_line of UTL_TCP. The end_of_body exception will be raised if the end of the HTTP response body is reached. Text data is automatically converted from the response body character set to the database character set.

Syntax

UTL_HTTP.read_line(
   r            IN OUT NOCOPY resp,
   data         OUT NOCOPY  VARCHAR2,
   remove_crlf  IN  BOOLEAN DEFAULT FALSE);

Parameters

Table 96-50 READ_LINE Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP response.

data (OUT)

The HTTP response body in text form

remove_crlf (IN)

Removes the newline characters if set to TRUE

Usage Notes

The UTL_HTTP package supports HTTP 1.1 chunked transfer-encoding. When the response body is returned in chunked transfer-encoding format as indicated in the response header, the package automatically decodes the chunks and returns the response body in de-chunked format.

If transfer timeout is set in the request of this response, read_line waits for each data packet to be ready to read until timeout occurs. If it occurs, this procedure stops reading and returns all the data read successfully. If no data is read successfully, the transfer_timeout exception is raised. The exception can be handled and the read operation can be retried later.

If a partial multibyte character is found at the end of the response body, read_line stops reading and returns all the complete multibyte characters read successfully. If no complete character is read successfully, the partial_multibyte_char exception is raised. The exception can be handled and the bytes of that partial multibyte character can be read as binary by the read_raw procedure. If a partial multibyte character is seen in the middle of the response body because the remaining bytes of the character have not arrived and read timeout occurs, the transfer_timeout exception is raised instead. The exception can be handled and the read operation can be retried later.

When the "Content-Type" response header specifies the character set of the response body and the character set is unknown or unsupported by Oracle, the "ORA-01482: unsupported character set" exception is raised if you try to read the response body as text. You can either read the response body as binary using the READ_RAW procedure, or set the character set of the response body explicitly using the SET_BODY_CHARSET procedure and read the response body as text again.

READ_RAW Procedure

This procedure reads the HTTP response body in binary form and returns the output in the caller-supplied buffer. The end_of_body exception will be raised if the end of the HTTP response body is reached.

Syntax

UTL_HTTP.read_raw(
   r     IN OUT NOCOPY resp,
   data  OUT NOCOPY RAW,
   len   IN PLS_INTEGER DEFAULT NULL);

Parameters

Table 96-51 READ_RAW Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP response.

data (OUT)

The HTTP response body in binary form

len (IN)

The number of bytes of data to read. If len is NULL, this procedure will read as much input as possible to fill the buffer allocated in data. The actual amount of data returned may be less than that specified if not much data is available before the end of the HTTP response body is reached or the transfer_timeout amount of time has elapsed. The default is NULL

Usage Notes

The UTL_HTTP package supports HTTP 1.1 chunked transfer-encoding. When the response body is returned in chunked transfer-encoding format as indicated in the response header, the package automatically decodes the chunks and returns the response body in de-chunked format.

If transfer timeout is set in the request of this response, read_raw waits for each data packet to be ready to read until timeout occurs. If it occurs, read_raw stops reading and returns all the data read successfully. If no data is read successfully, the transfer_timeout exception is raised. The exception can be handled and the read operation can be retried later.

END_RESPONSE Procedure

This procedure ends the HTTP response. It completes the HTTP request and response. Unless HTTP 1.1 persistent connection is used in this request, the network connection is also closed.

Syntax

UTL_HTTP.end_response (
   r  IN OUT NOCOPY resp);

Parameters

Table 96-52 END_RESPONSE Procedure Parameters
Parameter Description

r (IN/OUT)

The HTTP response.

HTTP Cookies

Use the following APIs to manipulate HTTP cookies.

GET_COOKIE_COUNT Function

This function returns the number of cookies currently maintained by the UTL_HTTP package set by all Web servers.

Syntax

UTL_HTTP.get_cookie_count 
RETURN PLS_INTEGER;

GET_COOKIES Function

This function returns all the cookies currently maintained by the UTL_HTTP package set by all Web servers.

Syntax

UTL_HTTP.get_cookies (
   cookies  IN OUT NOCOPY cookie_table);

Parameters

Table 96-53 GET_COOKIES Procedure Parameters
Parameter Description

cookies (IN/OUT)

The cookies returned

ADD_COOKIES Procedure

This procedure adds the cookies maintained by UTL_HTTP.

Syntax

UTL_HTTP.add_cookies (
   cookies  IN cookie_table);

Parameters

Table 96-54 ADD_COOKIES Procedure Parameters
Parameter Description

cookies (IN/OUT)

The cookies to be added

Usage Notes

The cookies that the package currently maintains are not cleared before new cookies are added.

CLEAR_COOKIES Procedure

This procedure clears all cookies maintained by the UTL_HTTP package.

Syntax

UTL_HTTP.clear_cookies;

HTTP Persistent Connections

Use the following functions to manipulate persistent connections.

GET_PERSISTENT_CONN_COUNT Function

This function returns the number of network connections currently kept persistent by the UTL_HTTP package to the Web servers.

Syntax

UTL_HTTP.get_persistent_conn_count 
RETURN PLS_integer;

Usage Notes

Connections to the same Web server at different TCP/IP ports are counted individually. The host names of the Web servers are identified as specified in the URL of the original HTTP requests. Therefore, fully qualified host names with domain names will be counted differently from the host names without domain names.

GET_PERSISTENT_CONNS Procedure

This procedure returns all the network connections currently kept persistent by the UTL_HTTP package to the Web servers.

Syntax

UTL_HTTP.get_persistent_conns (
   connections  IN OUT NOCOPY connection_table);

Parameters

Table 96-55 GET_PERSISTENT_CONNS Procedure Parameters
Parameter Description

connections (IN/OUT)

The network connections kept persistent

Usage Notes

Connections to the same Web server at different TCP/IP ports are counted individually. The host names of the Web servers are identified as specified in the URL of the original HTTP requests. Therefore, fully qualified host names with domain names will be counted differently from the host names without domain names.

CLOSE_PERSISTENT_CONN Procedure

This procedure closes an HTTP persistent connection maintained by the UTL_HTTP package in the current database session.

Syntax

UTL_HTTP.close_persistent_conn (
   conn  IN connection);

Parameters

Table 96-56 CLOSE_PERSISTENT_CONN Procedure Parameters
Parameter Description

conn (IN)

The HTTP persistent connection to close

CLOSE_PERSISTENT_CONNS Procedure

This procedure closes a group of HTTP persistent connections maintained by the UTL_HTTP package in the current database session. This procedure uses a pattern-match approach to decide which persistent connections to close.

To close a group of HTTP persistent connection that share a common property (for example, all connections to a particular host, or all SSL connections), set the particular parameters and leave the rest of the parameters NULL. If a particular parameter is set to NULL when this procedure is called, that parameter will not be used to decide which connections to close.

For example, the following call to the procedure closes all persistent connections to foobar:

utl_http.close_persistent_conns(host => 'foobar');

And the following call to the procedure closes all persistent connections through the proxy www-proxy at TCP/IP port 80:

utl_http.close_persistent_conns(proxy_host => 'foobar',
                                proxy_port => 80);

And the following call to the procedure closes all persistent connections:

utl_http.close_persistent_conns;

Syntax

UTL_HTTP.close_persistent_conns (
   host        IN VARCHAR2 DEFAULT NULL,
   port        IN PLS_INTEGER DEFAULT NULL,
   proxy_host  IN VARCHAR2 DEFAULT NULL,
   proxy_port  IN PLS_INTEGER DEFAULT NULL,
   ssl         IN BOOLEAN DEFAULT NULL);

Parameters

Table 96-57 CLOSE_PERSISTENT_CONNS Procedure Parameters
Parameter Description

host (IN)

The host for which persistent connections are to be closed

port (IN)

The port number for which persistent connections are to be closed

proxy_host (IN)

The proxy host for which persistent connections are to be closed

proxy_port (IN)

The proxy port for which persistent connections are to be closed

ssl (IN)

Close persistent SSL connection

Usage Notes

Connections to the same Web server at different TCP/IP ports are counted individually. The host names of the Web servers are identified as specified in the URL of the original HTTP requests. Therefore, fully qualified host names with domain names will be counted differently from the host names without domain names.

Note that the use of a NULL value in a parameter when this procedure is called means that the caller does not care about its value when the package decides which persistent connection to close. If you want a NULL value in a parameter to match only a NULL value of the parameter of a persistent connection (which is when you want to close a specific persistent connection), you should use the close_persistent_conn procedure that closes a specific persistent connection.

Error Conditions

The following APIs retrieve error information.

GET_DETAILED_SQLCODE Function

This function retrieves the detailed SQLCODE of the last exception raised.

Syntax

UTL_HTTP.get_detailed_sqlcode 
RETURN PLS_INTEGER;

GET_DETAILED_SQLERRM Function

This function retrieves the detailed SQLERRM of the last exception raised.

Syntax

UTL_HTTP.get_detailed_sqlerrm 
RETURN VARCHAR2;

Go to previous page Go to beginning of chapter Go to next page
Oracle
Copyright © 2000, 2002 Oracle Corporation.

All Rights Reserved.
Go To Documentation Library
Home
Go To Product List
Book List
Go To Table Of Contents
Contents
Go To Index
Index

Master Index

Feedback