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);
}