12 October 2008

(C#) WebサーバにPOST送信時にデータに改行が強制挿入される

C#のWebClientクラスを用いて、WebサーバにPOSTでデータを送信しようとしたら、最後の項目データの末尾に改行コード(CR+LF)が挿入されていて、プログラムが所定の動作をしなかったりする。

データ送信時のトラフィックをキャプチャしてみると

20081012-post-crlf.png
確かに、末尾のデータの後ろにはCR+LFがある

ということは、POSTで送るデータセットの最後にダミーデータを送信すればよいわけである。サンプルコードは次の通り。

private string Network_Sync(string strCmd, string strData) { int nFlag; if (InternetGetConnectedState(out nFlag, 0) == false) { // ネットワークに接続されていない return(""); } string strUri = "http://192.168.1.1/test/perl/test.cgi"; string resText; try { // ネットワークコネクションの定義 System.Net.WebClient wc = new System.Net.WebClient(); System.Collections.Specialized.NameValueCollection ps = new System.Collections.Specialized.NameValueCollection(); // POSTで送信するデータセットを定義する ps.Add("cmd", strCmd); ps.Add("data", strData); ps.Add("dummy", "dummy"); // データの送信・応答を受信 byte[] resData = wc.UploadValues(strUri, ps); // コネクションの破棄 wc.Dispose(); // 応答バイト列を、文字列に変換して格納 resText = System.Text.Encoding.UTF8.GetString(resData); } catch { // ネットワークエラー resText = ""; } return(resText); }