C#通過WebClient POST提交表單

wufflina 9年前發布 | 2K 次閱讀 C# c# Webclient

C#提交表單

// 要提交表單的URI字符串。
string url= http://www.baiduhome.net/code/;
// 要提交的字符串數據。
string postString = "userName=test&Title=test&Content=test";
// 初始化WebClient
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
// 將字符串轉換成字節數組
byte[] postData = Encoding.ASCII.GetBytes(postString);
//ASP.NET 返回的頁面一般是Unicode,如果是簡體中文應使用 
//Encoding.GetEncoding("GB2312").GetBytes(postString)
// 上傳數據,返回頁面的字節數組
byte[] responseData = webClient.UploadData(uriString, "POST", postData);
//ASP.NET 返回的頁面一般是Unicode,如果是簡體中文應使用 
//Encoding.GetEncoding("GB2312").GetString(responseData)
// 返回的將字節數組轉換成字符串(HTML)
string srcString = Encoding.UTF8.GetString(responseData);

srcStrinig 就是提交表單后所返回頁面的HTML。

提交ASP.NET表單時,必須給“__VIEWSTATE”和“__EVENTVALIDATION”賦值。“__VIEWSTATE”和“__EVENTVALIDATION”的值可以通過在要提交的頁面上按右鍵“查看源文件”中找到。

// 提交按鈕的文本
string submitButton = "登錄";
// 頁面的 VeiwState(可以通過IE打開頁面,右鍵“查看源文件”取得)
string viewState = "/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0=";
// 頁面的 EventValidation(可以通過IE打開頁面,右鍵“查看源文件”取得)
string eventValidation = "/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc";

 submitButton = System.Web.HttpUtility.UrlEncode(submitButton);
viewState = System.Web.HttpUtility.UrlEncode(viewState);
 eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);

訪問第一頁時,服務器會返回一個Cookies值,打開第二頁時要向服務器提交訪問 第一頁時返回的Cookies,才能打開頁面。可以這樣解決:

打開第一頁時:

byte[] buff=webclient.DownloadData(url);
string cookie=webclient.ResponseHeaders.Get("Set-Cookie");

向第二頁發送請求時需要將Cookie帶到請求頭中。

webclient.Headers.Add("Cookie", cookie);
 本文由用戶 wufflina 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!