IBM i からWebAPIを実行してみたがエラーになってしまう!
Question
IBM i (AS/400)からWebAPIを実行したいと思っています。
具体的には「QSYS2.HTTP_GET()」を使用しようとしているのですが、HTTP、HTTPSどちらに対してもエラーとなってしまいます。
何をどうしたらよいのかわからず、対処方法を教えていただけますでしょうか。
Answer
WebAPIの使用がうまくいかない原因について、主に次の 3 点が考えられます。
以下、順番に見ていきましょう。
大文字小文字が正しく認識されていない
「QSYS2.HTTP_GET()」を使用する場合、小文字が扱える必要があります。
小文字を扱うためには、使用可能なコード化文字セットID(CCSID)になっているかどうかを確認する必要があります。
システム値「QCCSID」及びユーザープロファイルの「CCSID」の値を確認してください。
システム値:WRKSYSVAL QCCCSID
デフォルトでは「65535」になっていることが多いですが、「65535」の場合小文字を使用することができません。
もし「65535」が設定されている場合は、ユーザープロファイル単位でCCSIDを変更してください。
なお、日本語環境の場合、「5035」「1399」であれば小文字を使用できます。
ユーザープロファイル:DSPUSRPRF
ページダウンし「コード化文字セットID」の値を確認します。
もし「*SYSVAL」となっている場合は、システム値の設定が参照されますので、システム値が「65535」の場合は、ユーザープロファイル側で値を変更する必要があります。
コマンド「CHGUSRPRF」にて、「5035」あるいは「1399」に変更してください
小文字が正しく認識できていれば、非SSL環境である「HTTP」通信では応答が返ってくる可能性があります。
まずは HTTP にて動作確認を行ってみてください。
IBM i (AS/400)が外部と接続ができない環境になっている
お使いのIBM i(AS/400)が社外と通信可能な環境にあるかどうかも重要なポイントです。
例えば以下の疎通確認コマンドを実行し、応答が返ってくるかを確認してください。
- コマンド「CALL QCMD」を実行する
- コマンド「PING RMTSYS('8.8.8.8')」を実行する
応答が返ってくれば外部接続が可能な環境であると判断できます。
応答がない場合は、まずネットワーク環境の確認が必要になります。
また、名前解決ができていない場合も考えられますので、必要に応じてコマンド「CFGTCP」の「12. TCP/IP ドメイン情報の変更」にてDNS設定もご確認ください。
SSL認証に失敗している
「HTTP」では成功するものの、「HTTPS」でエラーになる場合は、SSL の認証に失敗している可能性があります。
SSL接続をするためには、対象のCA証明書が必要になります。
例えば今回以下のサイトにアクセスするとします。
https://www.somesite.com/authorized_info.htmlこのサイトの証明書情報を確認し、必要な証明書をエクスポートします。
今回の例では「ISRG Root X1」がCA証明書に該当します。
この証明書を、IBM i (AS/400)に登録する必要があります。
登録手順については、以前の記事で紹介していますので、以下を参考に設定を行ってください。
https://www.e-bellnet.com/category/technology/2510/2510-04.html
いかがでしょうか。Web APIはうまく実行できるようになりましたでしょうか。
昨今ではWeb APIへの関心が高くなってきているものと思いますので、もしテストしてみてうまくいかない場合は、上記のあたりをご確認いただければと思います。
by . かんぴょう木綿さん
