C#のWebClientクラスを用いて、WebサーバにPOSTでデータを送信しようとしたら、最後の項目データの末尾に改行コード(CR+LF)が挿入されていて、プログラムが所定の動作をしなかったりする。
データ送信時のトラフィックをキャプチャしてみると
確かに、末尾のデータの後ろには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);
}