很多時候,我們需要使用C#中的WebClient 來收發數據,WebClient 類提供向 URI 標識的任何本地、Intranet 或 Internet 資源發送數據以及從這些資源接收數據的公共方法。本文就較為詳細的說明了WebClient中使用post發送數據實現方法。
下面先說說WebClient 最主要的功能。
WebClient 構造函數
.Ctor 包括 一個空構造函數 和一個靜態構造函數, 靜態構造函數主要為UrlEncode 和UrlEncodeAndWirte 編碼提供參照byte[]數據的初始化作用。如下所示:
stati WebClient()public WebClient()
WebClient提供四種將數據上載到資源的方法:
OpenWrite 返回一個用于將數據發送到資源的 Stream。
UploadData 將字節數組發送到資源并返回包含任何響應的字節數組。
UploadFile 將本地文件發送到資源并返回包含任何響應的字節數組。
UploadValues 將NameValueCollection 發送到資源并返回包含任何響應的字節數組。
WebClient還提供三種從資源下載數據的方法:
DownloadData 從資源下載數據并返回字節數組。
DownloadFile 從資源將數據下載到本地文件。
OpenRead 從資源以 Stream 的形式返回數據。
了解了WebClient的知識后,我們開始正式進入正題。
通過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")));
新聞熱點
疑難解答