通過Post方式發送資料可以避免Get方式的資料長度限制
下面採用WebClient來實現這個功能
Web服務端可以是任何CGI但是要搞清楚Web端接受的編碼,代碼如下
WebClient wc = new WebClient();
StringBuilder postData = new StringBuilder();
postData.Append("formField1=" + "表單資料一");
postData.Append("&formField2=" + "表單資料二");
postData.Append("&formField3=" + "表單資料三");
//下面是GB2312編碼
byte[] sendData = Encoding.GetEncoding("GB2312").GetBytes(postData.ToString());
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
wc.Headers.Add("ContentLength", sendData.Length.ToString());
byte[] recData= wc.UploadData("http://www.domain.cn/services/DataImport1.asp","POST",sendData);
//顯示傳回值注意編碼
MessageBox.Show(Encoding.GetEncoding("GB2312").GetString(recData));
注意"表單資料x"中包含如 "&","=","+"時需要使用,
HttpUtility.UrlEncode( "+++xxx為什麼不編碼也可以",Encoding.GetEncoding("GB2312")) 進行編碼
HttpUtility.UrlEncode(string) 預設使用UTF-8進行編碼,因此使用 UrlEncode編碼時並且欄位裡有中文,並且目標網站使用GB2312時,需要在UrlEncode函數中指明使用Gb2312
這樣上面的拼接代碼可以修改為如下:
postData.Append("formField1=" + HttpUtility.UrlEncode("表單資料一",Encoding.GetEncoding("GB2312")));
postData.Append("&formField2=" + HttpUtility.UrlEncode("表單資料二",Encoding.GetEncoding("GB2312")));
................