« Tree型のデータ | メイン | マニュアルは必要なやつが作れ »

2008年09月04日

仕事の周辺 » .NET

CGIにCSVを送りつける

送り先のCGIの方も社内で自作されたものなので、作者にプログラム同士の連携しやすい形に変更してもらおうとも思ったのですが、大量のデータを送りつける場合は、ファイルアップロードの方がPOSTサイズの制限に引っかからないようなので、そのままmultipart/form-dataでCSVを送りつけることにしました。
ここのHttpWebRequestとHttpWebResponseを使った方法のサンプルをそのままコピッて、明らかに変更必要と思われるところだけ変更してとりあえず実行(^^;)。相手がよければそのまま動いたはずのものが、思わぬ深みに。2008年6月26日のコメントにもありますが、相手がPerlの場合は最後の「--」を待っていることが多いようで、cgi-lib.plを使っている場合は、「reached end of input while seeking boundary of multipart. Format of CGI input is wrong.」、CGI.pmを使っている場合は「400 Bad request (malformed multipart POST)」というようなエラーとなります。リンクされているmultipart/form-dataの仕様をざっと読んだ限りでは特に最後の「--」には触れられていないようなので、ブラウザで実装されている仕様にあわせてCGIのモジュールが書かれてしまっているっぽい? まあここは素直に相手方に合わせて最後のboundaryの後におまじない「--」をつけときませう。
もう一つの変更箇所は、DBから読んだデータをそのまま送りつけるので、ファイルアップロードするためにわざわざローカルにテキストファイルを書き込んだりせず、直接ストリングビルダーにCSVを作成して、他のパラメータと一緒にPostデータにして、ストリングに変換してからバイト配列に変換して、reqStreamに書き込み、に変更。
異なるシステム間のデータ連携のオプションが一つ増えた感じです。まもなくデヂエが導入されることに決まったようなので、今後はデヂエから自動でCSV取って来てというような要望が増えそうですが…。

投稿者 idic : 2008年09月04日 21:21

コメント

コメントしてください

サイン・インを確認しました、 さん。コメントしてください。 (サイン・アウト)

(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


情報を登録する?