在沒有做題目中所述的內容的時候,感覺這應該是很簡單的東西,但是當真正開始做的時候卻發現,有很多問題
現在在這里寫出來,供和我一樣水平不高的參考一下。
在寫本文之前參照了一下文章
歡迎使用CSDN論壇閱讀器 : CSDN Reader(附全部源代碼) 最新版本:20070212
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
C#通過webRequest保持在同一Session中Post數據 http://blog.csdn.net/crabo/archive/2005/12/08/547092.aspx
c# 模擬Asp.net頁面中的某個按鈕的點擊,向web服務器發出請求
主要就組織要提交的數據,然后以post方式提交。
假設我們有如下的網頁

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

用IE訪問這個頁面的時候可以得到如下的輸出

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

由上面的代碼可以看出除了txtName,txtPwd以及兩個按鈕外,多出了兩個__VIEWSTATE,__EVENTVALIDATION這四個表單需要提交到的,要模擬哪個按鈕,在加上哪個按鈕的表單的值就可以了,如:btnUpdate=Logon
在拼接提交的字符串的時候注意一下,用System.Web.HttpUtility.UrlEncode方法轉換成Url編碼的字符串。
下面是針對這個頁面的btnUpdate按鈕的提交數據
2 string __EVENTVALIDATION = "/wEWBQKcopufDgLEhISFCwKd+7qdDgLynailDAKT+PmaCJleqITXMfQuE9LK49YoxHV2oTzQ";
3
4 __VIEWSTATE = System.Web.HttpUtility.UrlEncode(__VIEWSTATE);
5
6 __EVENTVALIDATION = System.Web.HttpUtility.UrlEncode(__EVENTVALIDATION);
7
8 string strPostData = String.Format("__VIEWSTATE={0}&txtName={1}&txtPwd={2}&btnUpdate=Longon&__EVENTVALIDATION={3}"
9 , __VIEWSTATE, this.txtName.Text, this.txtPassword.Text, __EVENTVALIDATION
10 );
然后創建一個HttpWebRequest對象,設置提交方式是post,然后把上面准備的字符串寫進請求數據流里
基本上就可以了
如果有需要在訪問不同頁面時保存Session的話,需要設置HttpWebRequest對象的CookieContainer屬性,保證每次設置的CookieContainer都是同一個對象就可以了。
下面是這個類就是向WEB頁面發出請求,並得到返回數據的類

使用方法如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35
