C#的HttpWebRequest编程,支持带ViewState的网页POST请求

 1 staticprivatestring SearchURL(string id)
 2 {
 3 try
 4 {
 5 //Get the ViewState and EventValidation
 6 HttpWebRequest request = WebRequest.Create(URI) as HttpWebRequest;
 7 request.Method ="GET";
 8 request.KeepAlive =false;
 9 
10 //Get the response
11 HttpWebResponse response = request.GetResponse() as HttpWebResponse;
12 System.IO.Stream responseStream = response.GetResponseStream();
13 System.IO.StreamReader reader =new System.IO.StreamReader(responseStream, Encoding.UTF8);
14 string srcString = reader.ReadToEnd();
15 
16 //Get the ViewState
17 string viewStateFlag ="id=\"__VIEWSTATE\" value=\"";
18 int i = srcString.IndexOf(viewStateFlag) + viewStateFlag.Length;
19 int j = srcString.IndexOf("\"", i);
20 string viewState = srcString.Substring(i, j - i);
21 
22 //Get the ViewState
23 string EventValidationFlag ="id=\"__EVENTVALIDATION\" value=\"";
24 i = srcString.IndexOf(EventValidationFlag) + EventValidationFlag.Length;
25 j = srcString.IndexOf("\"", i);
26 string eventValidation = srcString.Substring(i, j - i);
27 
28 //Compose the URL
29 viewState = Uri.EscapeDataString(viewState);
30 eventValidation = Uri.EscapeDataString(eventValidation);
31 string strSearch = Uri.EscapeDataString("查询");
32 
33 string formatString ="__VIEWSTATE={0}&__EVENTVALIDATION={1}&TextBox1={2}&Button1={3}";
34 string postString =string.Format(formatString, viewState, eventValidation, id,strSearch);
35 
36 //Change to byte[]
37 byte[] postData = Encoding.ASCII.GetBytes(postString);
38 
39 //Compose the new request
40 request = WebRequest.Create(URI) as HttpWebRequest;
41 request.Method ="POST";
42 request.KeepAlive =false;
43 request.ContentType ="application/x-www-form-urlencoded";
44 request.ContentLength = postData.Length;
45 
46 System.IO.Stream outputStream = request.GetRequestStream();
47 outputStream.Write(postData, 0, postData.Length);
48 outputStream.Close();
49 
50 //Get the new response
51 response = request.GetResponse() as HttpWebResponse;
52 responseStream = response.GetResponseStream();
53 reader =new System.IO.StreamReader(responseStream);
54 srcString = reader.ReadToEnd();
55 return srcString;
56 }
57 catch (WebException we)
58 {
59 Console.WriteLine("Communication error,"+ we.Message +" please check your connectivity and try again.", "Error");
60 }
61 catch
62 {
63 Console.WriteLine("Unknow error.", "Error");
64 }
65 returnnull;
66 }
View Code

 

posted @ 2013-07-04 17:33  宁静.致远  阅读(630)  评论(0编辑  收藏  举报