HTTP 関数の概要
SYSTOOLS の HTTP 関数は、Web サービスを公開または利用する HTTP 要求を行うために使用します。これらの関数により、SQL プログラマーは、SQL (組み込み SQL を含む) を介して Representational State Transfer (RESTful) を使用できます。
環境に関する考慮事項
- JVM がジョブで既に存在していてはなりません (Java ストアード・プロシージャー・サポートで作成された JVM を除く)。
- ジョブ CCSID を 65535 にすることはできません。
- PASE がインストールされていて、作動可能でなければなりません。CHKPRDOPT PRDID(5770SS1) OPTION(33) CL コマンドを使用して、PASE がインストールされていることを確認できます。
基本 HTTP 関数
- 最初のディメンションは、HTTP 操作です。4 つの異なる HTTP 操作、つまり GET、PUT、POST、および DELETE があります。
- 2 番目のディメンションは、データを返すために使用されるデータ・タイプです。2 つの選択肢 BLOB および CLOB があります。
- 3 番目のディメンションは、関数の詳細バージョンを使用する必要があるかどうかです。非詳細関数は、スカラー関数です。VERBOSE 関数は、HTTP サーバーから送信された戻りのヘッダー情報を返すテーブル関数です。
関数の名前は、これらの 3 つのディメンションを反映したものです。例えば、HTTPGETCLOBVERBOSE は、最初のディメンションとして GET 操作、2 番目のディメンションとして CLOB データ・タイプ、3 番目のディメンションとして VERBOSE 設定を使用します。
機能 | 説明 | 資料リンク |
---|---|---|
HTTPDELETEBLOB | HTTP DELETE 要求を実行し、BLOB データを返します。 | HTTPDELETEBLOB および HTTPDELETECLOB スカラー関数 |
HTTPDELETEBLOBVERBOSE | HTTP DELETE 要求を実行し、BLOB データおよび応答ヘッダーを返します。 | HTTPDELETEBLOBVERBOSE および HTTPDELETECLOBVERBOSE テーブル関数 |
HTTPDELETECLOB | HTTP DELETE 要求を実行し、CLOB データを返します。 | HTTPDELETEBLOB および HTTPDELETECLOB スカラー関数 |
HTTPDELETECLOBVERBOSE | HTTP DELETE 要求を実行し、CLOB データおよび応答ヘッダーを返します。 | HTTPDELETEBLOBVERBOSE および HTTPDELETECLOBVERBOSE テーブル関数 |
HTTPGETBLOB | HTTP GET 要求を実行し、BLOB データを返します。 | HTTPGETBLOB および HTTPGETCLOB スカラー関数 |
HTTPGETBLOBVERBOSE | HTTP GET 要求を実行し、BLOB データおよび応答ヘッダーを返します。 | HTTPGETBLOBVERBOSE および HTTPGETCLOBVERBOSE テーブル関数 |
HTTPGETCLOB | HTTP GET 要求を実行し、CLOB データを返します。 | HTTPGETBLOB および HTTPGETCLOB スカラー関数 |
HTTPGETCLOBVERBOSE | HTTP GET 要求を実行し、CLOB データおよび応答ヘッダーを返します。 | HTTPGETBLOBVERBOSE および HTTPGETCLOBVERBOSE テーブル関数 |
HTTPPOSTBLOB | HTTP POST 要求を実行し、BLOB データを返します。 | HTTPPOSTBLOB および HTTPPOSTCLOB スカラー関数 |
HTTPPOSTBLOBVERBOSE | HTTP POST 要求を実行し、BLOB データおよび応答ヘッダーを返します。 | HTTPPOSTBLOBVERBOSE および HTTPPOSTCLOBVERBOSE テーブル関数 |
HTTPPOSTCLOB | HTTP POST 要求を実行し、CLOB データを返します。 | HTTPPOSTBLOB および HTTPPOSTCLOB スカラー関数 |
HTTPPOSTCLOBVERBOSE | HTTP POST 要求を実行し、CLOB データおよび応答ヘッダーを返します。 | HTTPPOSTBLOBVERBOSE および HTTPPOSTCLOBVERBOSE テーブル関数 |
HTTPPUTBLOB | HTTP PUT 要求を実行し、BLOB データを返します。 | HTTPPUTBLOB および HTTPPUTCLOB スカラー関数 |
HTTPPUTBLOBVERBOSE | HTTP PUT 要求を実行し、BLOB データおよび応答ヘッダーを返します。 | HTTPPUTBLOBVERBOSE および HTTPPUTCLOBVERBOSE テーブル関数 |
HTTPPUTCLOB | HTTP PUT 要求を実行し、CLOB データを返します。 | HTTPPUTBLOB および HTTPPUTCLOB スカラー関数 |
HTTPPUTCLOBVERBOSE | HTTP PUT 要求を実行し、CLOB データおよび応答ヘッダーを返します。 | HTTPPUTBLOBVERBOSE および HTTPPUTCLOBVERBOSE テーブル関数 |
これらの HTTP 関数には、アクセスする HTTP サーバー、HTTP ヘッダーの設定、サーバーに送信する任意のデータを指定するパラメーターを渡します。最初の 2 つのパラメーターは、すべての HTTP 関数で同じです。
- 第 1 パラメーターは、サーバーへのアクセスに使用する URL です。
- 第 2 のパラメーターは、要求がサーバーに示す HTTP ヘッダーを指定する XML 文書です。この XML 文書は、CLOB または XML 値として指定できます。HTTP ヘッダー XML 文書の形式は、以下のとおりです。
<httpHeader headerAttribute="headerAttributeValue"> <header name="name" value="value" /> <header name="Accept" value="text/plain,application/xml,*/*" /> </httpHeader>
XML ヘッダー文書は、後述する各種属性を持つ httpHeader 要素で構成されます。そして、httpHeader 要素には、追加の HTTP ヘッダーの設定に使用される header 要素が含まれます。これは、ヘッダーの名前とその名前に対応する値を指定することで行われます。
httpHeader 要素では、以下の属性を設定できます。表 2. httpHeader 属性 属性名 タイプ デフォルト 説明 connectionTimeout 整数 SystemDefault タイムアウト (ミリ秒数) readTimeout 整数 SystemDefault タイムアウト (ミリ秒数) followRedirects ブール true true の場合、リダイレクトに従います。 useCaches ブール true true の場合、キャッシュが使用されます。 includeErrorMsg ブール false true の場合、HTTP 詳細関数により、RESPONSEMSG 列でエラー情報が返されます。 header 要素により、各種 HTTP ヘッダーを設定できます。ヘッダー名「Content-Type」、「Content-Length」、「Content-Encoding」、「Accept-Encoding」、「Authorization」、「User-Agent」では、大/小文字は区別されません。残りのヘッダーは、指定したとおりに送信されます。
例えば、以下のヘッダーを使用した場合を考えます。
これにより、サーバーに送信される HTTP ヘッダーに "User-Agent": "IBM i HTTP function" が含まれることになります。<httpHeader><header name="User-Agent" value="IBM i HTTP function"/></httpHeader>
一般 HTTP 関数
機能 | 説明 | 資料リンク |
---|---|---|
HTTPBLOB | HTTP 要求を実行し、BLOB データを返します。 | HTTPBLOB および HTTPCLOB スカラー関数 |
HTTPCLOB | HTTP 要求を実行し、CLOB データを返します。 | HTTPBLOB および HTTPCLOB スカラー関数 |
ユーティリティー HTTP 関数
機能 | 説明 | 資料リンク |
---|---|---|
BASE64DECODE | Base64 デコードされたビット・データ・ストリングを返します。 | BASE64DECODE スカラー関数 |
BASE64ENCODE | 文字ストリングの Base64 エンコードされたバージョンを返します。 | BASE64ENCODE スカラー関数 |
HTTPHEAD | HTTP HEAD 要求を使用して HTTP ヘッダーを検証します。 | HTTPHEAD スカラー関数 |
URLDECODE | URL エンコードされたストリングをデコードします。 | URLDECODE スカラー関数 |
URLENCODE | URL エンコードを使用してストリングをエンコードします。 | URLENCODE スカラー関数 |
一般的なエラー
- 現行システムにインターネット・アクセスがない場合、以下のエラーが発生することがあります。
[SQL4302] Java stored procedure or user-defined function SYSTOOLS.HTTPGETCLOB, specific name HTTPG00005 aborted with an exception "java.net.ConnectException:A remote host refused an attempted connect operation. (Connection refused)".
- システムで DNS が構成されていない場合、以下のエラーが発生することがあります。
[SQL4302] Java stored procedure or user-defined function SYSTOOLS.HTTPGETCLOB, specific name HTTPG00005 aborted with an exception "java.net.UnknownHostException"
- ジョブ CCSID が 65535 の場合、以下のエラーが発生することがあります。
[SQL0332] Character conversion between CCSID 65535 and CCSID 1200 not valid.
- https が使用されている場合、接続では SSL が使用されます。正常に動作するには、認識される認証局によって署名された証明書をサーバーが使用する必要があります。自己署名証明書を使用すると、以下のエラーが発生することがあります。
[SQL4302] Java stored procedure or user-defined function SYSTOOLS.HTTPGETCLOB, specific name HTTPG00005 aborted with an exception "com.ibm.jsse2.util.h: PKIX path building failed: java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.
自己署名証明書を使用するサーバーにアクセスする必要がある場合は、使用される JVM のトラストストアに証明書を追加する必要があります。現行の JVM が 32 ビットの JDK 6 である場合、サーバーから証明書をダウンロードした後に、QSH で以下のコマンドを使用できます。keytool -import -trustcacerts -keystore /QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit/jre/lib/security/cacerts -storepass changeit -noprompt -alias myhost -file myhost.crt
- 一部の Web サイトでは、特定の SSL バージョンを使用する必要があります。その場合、以下のようなエラーが発生することがあります。
[SQL4302] Java stored procedure or user-defined function SYSTOOLS.HTTPGETCLOBVERBOSE, specific name HTTPG00007 aborted with an exception "Received fatal alert: handshake_failure".
特定の SSL バージョンの使用を強制するために、以下を行うことができます。- JVM プロパティーを設定するユーザー定義関数を作成します。これは、システムごとに 1 回実行するだけで構いません。
CREATE FUNCTION SYSTOOLS.setProperty(PROPERTY VARCHAR(80), VALUE VARCHAR(80)) RETURNS VARCHAR(80) LANGUAGE JAVA PARAMETER STYLE JAVA EXTERNAL NAME 'java.lang.System.setProperty'
- ジョブで HTTP 関数を呼び出す前に、以下を使用してデフォルト SSL プロトコルを設定します。
VALUES SYSTOOLS.setproperty('com.ibm.jsse2.overrideDefaultProtocol','TLSv12')
- JVM プロパティーを設定するユーザー定義関数を作成します。これは、システムごとに 1 回実行するだけで構いません。
デバッグに関する考慮事項
STRSQL を使用して HTTP 関数を呼び出すと、有用な問題情報が得られません。エラー情報を確認するには、代わりに ACS Run SQL Scripts を使用して HTTP 関数を実行する必要があります。
HTTP 関数は Java で提供されているネットワーキング関数を使用するため、Java コードで検出されたネットワーキングの問題が SQL レベルで公開されず、問題を診断するために十分な詳細が得られないことがあります。HTTP 関数が SQL4302 エラーで失敗し、情報が有用でない場合は、例外に関する詳細情報を確認するために、Java ストアード・プロシージャー・トレースを使用できます。
- トレースを有効にします。
CALL QSYS2.QCMDEXC('ADDENVVAR ENVVAR(QIBM_COMPONENT_TRACE_LEVEL) VALUE(''SQJAVA,VERBOSE'')')
- HTTP 関数を実行します。
- QTEMP のファイルにトレースをダンプします。
CALL QSYS2.QCMDEXC('DMPUSRTRC')
- トレースを現行ライブラリーにコピーします。
CREATE TABLE MYTRACE AS (SELECT TRIM(CAST(QAP0ZDMP AS VARCHAR(200) CCSID 37)) LINE FROM QTEMP.QAP0ZDMP ) WITH DATA
- トレースの Java 例外を表示します。
SELECT * FROM MYTRACE WHERE LINE LIKE '% at %' OR LINE LIKE '%Except%'