Web開発

112. STRPCCMD でCGIにパラメータを渡すには

PCオーガナイザーで

‘START ‘ + URL

を実行すると5250エミュレータからブラウザを起動することが
できることは以前にも紹介した。

   STRPCO                            
   MONMSG     IWS4010                
   STRPCCMD   PCCMD('START HTTP://WWW.OFFICEQUATTRO.COM') PAUSE(*NO) 

を実行するとブラウザが自動的に起動されて
㈱オフィスクアトロのホーム・ページが表示されるはずである。

さらにCGIを呼び出して実行するのであれば


  STRPCCMD   PCCMD('START HTTP://192.168.1.1/CGI-BIN/MYCGI.PGM")

のようにPCオーガナイザーを実行すればCGI: MYCGIが起動されて実行される。
次にCGIのパラメータを渡したいとして SHCODE=NV-CF1 を渡すのであれば
CGIの記述に ? 以下にパラメータを次のように付加すればよい。


  HTTP://192.168.1.1/CGI-BIN/MYCGI.PGM?SHCODE=NV-CF1

ここまでは問題はない。
次に2番目のパラメータとして ZAIKO=90 というパラメータも付加したいと
する。
HTTPのURLの仕様によれば 2番目以降のパラメータは文字

&

で結合すればよいので


  HTTP://192.168.1.1/CGI-BIN/MYCGI.PGM?SHCODE=NV-CF1&ZAIKO=90

>と記述すればよい。
実際にこのURL文字列をブラウザのURL欄に入力して実行すると正常に
実行される。
ところが STRPCCMD のときだけは正常な実行はできない。
原因を調べてみると
HTTPサーバー側では


  HTTP://192.168.1.1/CGI-BIN/MYCGI.PGM?SHCODE=NV-CF1

とだけ入力されていて文字 & 以降はすべてクリヤーされる。
IBMマニュアルによるとSTRPCCMDで特殊文字を含む場合は
PCCMDを引用符で囲むようにとの注意書きはあったが一向に効果はない。
これはPCオーガナイザーのバグである可能性が高い。

&以降は切断されてしまうのである。

HTMLでは文字 &のエスケープ・シーケンスは & であるが
これも効果はなくPCオーガナイザーによって &以降は切断されてしまう。
もちろんこのような障害を回避する策はIBMマニュアルに記述はない。

正解は文字 &

%26

としてエンコードすることである。
文字 & のASCIIコードは 0x26 であるのでこれをエンコードすれば
%26 として表現される。
エンコードされた文字はHTTPサーバー(弊社ではAlaska)によって
デコードされて元の文字 & に戻される。
& は %26とエンコードしていればPCオーガナイザーによって削除されて
しまうことはない。
よって

 
 
 HTTP://192.168.1.1/CGI-BIN/MYCGI.PGM?SHCODE=NV-CF1%26ZAIKO=90

としてSTRPCOを投入すればよい。