VS2005写的一个在线游戏Travian的机器人小工具雏形
最近,一个朋友推荐了一个网页版的在线游戏,休息时可以玩玩调节一下心情,游戏地址是:http://s1.travian.china.com/login.php
玩了玩,感觉还挺有意思,不过老是需要去看看网页进度比较累,所以就想着写个工具来自动化操作(没办法,RD一般都喜欢偷懒的),之前还没有用WinForm操作过Cookie,为了保持Cookie,中间还出现了一点小小挫折,不过现在已经搞定了,把Cookie保持的代码贴给大家看看,有兴趣做类似工具的人可以参考一下。
1//Cookies集合保存
2 public CookieCollection CCol = null;
3
4 //设置公司代理
5 public WebProxy GetWP()
6 {
7 WebProxy _WP = new WebProxy("h00proxy", 80);
8 _WP.BypassProxyOnLocal = true;
9 NetworkCredential _CD = new NetworkCredential("davi xiong", "asdfad", "bqc");
10 _WP.Credentials = _CD;
11 return _WP;
12 }
13
14 private void Login(string strId, string strPassword)
15 {
16
17 ASCIIEncoding encodingA = new ASCIIEncoding();
18
19 CookieContainer myCookieContainer = new CookieContainer();
20
21 progressBar1.Value = 0; // Process
22 //=======GET================================================================================
23 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://s1.travian.china.com/login.php");
24 myRequest.Proxy = GetWP();
25
26 myRequest.CookieContainer = myCookieContainer;
27
28 progressBar1.Value = 10; // Process
29 HttpWebResponse myResponseA = (HttpWebResponse)myRequest.GetResponse();
30 StreamReader readerA = new StreamReader(myResponseA.GetResponseStream(), Encoding.Default);
31 string Getcontent = readerA.ReadToEnd();
32
33 progressBar1.Value = 20; // Process
34 Regex Reg = new Regex("<input type=\"hidden\" name=\"login\" value=\"(.*)\">");
35 string login = "";
36 if (Reg.IsMatch(Getcontent))
37 {
38 Match Mc = Reg.Matches(Getcontent)[0];
39 login = Mc.Groups[1].Value;
40 }
41 progressBar1.Value = 30; // Process
42
43 Reg = new Regex("<input class=\"fm fm110\" type=\"text\" name=\"(.*)\" value=");
44 string name = "";
45 if (Reg.IsMatch(Getcontent))
46 {
47 Match Mc = Reg.Matches(Getcontent)[0];
48 name = Mc.Groups[1].Value;
49 }
50
51 progressBar1.Value = 40; // Process
52 Reg = new Regex("<input class=\"fm fm110\" type=\"password\" name=\"(.*)\" value=");
53 string pass = "";
54 if (Reg.IsMatch(Getcontent))
55 {
56 Match Mc = Reg.Matches(Getcontent)[0];
57 pass = Mc.Groups[1].Value;
58 }
59
60 progressBar1.Value = 50; // Process
61 Reg = new Regex("<p align=\"center\"><input type=\"hidden\" name=\"(.*)\" value=\"(.*)\">");
62 string hid2name = "";
63 string hid2value = "";
64 if (Reg.IsMatch(Getcontent))
65 {
66 Match Mc = Reg.Matches(Getcontent)[0];
67 hid2name = Mc.Groups[1].Value;
68 hid2value = Mc.Groups[2].Value;
69 }
70
71 //=======DATA==========================================================
72 progressBar1.Value = 60; // Process
73 ASCIIEncoding encoding = new ASCIIEncoding();
74 string postData = name + "=" + strId;
75 postData += "&" + pass + "=" + strPassword;
76 postData += "&login=" + login;
77 postData += "&autologin=ja&" + hid2name + "=" + hid2value + "&w=1024:768";
78
79 byte[] data = encoding.GetBytes(postData);
80
81 //=======POST================================================================================
82 progressBar1.Value = 70; // Process
83 myRequest = (HttpWebRequest)WebRequest.Create("http://s1.travian.china.com/dorf1.php");
84 myRequest.Proxy = GetWP();
85
86 myRequest.Method = "POST";
87 myRequest.ContentType = "application/x-www-form-urlencoded";
88 myRequest.ContentLength = data.Length;
89 myRequest.CookieContainer = myCookieContainer;
90 Stream newStream = myRequest.GetRequestStream();
91 newStream.Write(data, 0, data.Length);
92 newStream.Close();
93
94 progressBar1.Value = 80; // Process
95 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
96 CCol = myCookieContainer.GetCookies(myRequest.RequestUri);
97 progressBar1.Value = 90; // Process
98 StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.Default);
99 string content = reader.ReadToEnd();
100
101 progressBar1.Value = 100; // Process
102 progressBar1.Value = 0; // Process
103 }
104
105 private void BtnLogin_Click(object sender, EventArgs e)
106 {
107 Login("davi97", "sffg");
108 }
109
110 //获取登录后才能查看的网页数据
111 private string GetPageData(string URL)
112 {
113 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
114 myRequest.Proxy = GetWP();
115
116 myRequest.CookieContainer = new CookieContainer();
117 myRequest.CookieContainer.Add(new Uri(URL), CCol);
118
119 HttpWebResponse myResponseA = (HttpWebResponse)myRequest.GetResponse();
120 StreamReader readerA = new StreamReader(myResponseA.GetResponseStream(), Encoding.Default);
121 return readerA.ReadToEnd();
122 }
123
124 private void BtnSearch_Click(object sender, EventArgs e)
125 {
126 string URL = "http://s1.travian.china.com/karte.php";
127 string ReqContent = GetPageData(URL);
128
129 //TODO : 自动搜索地图上的人员信息
130
131 }
132
133
2 public CookieCollection CCol = null;
3
4 //设置公司代理
5 public WebProxy GetWP()
6 {
7 WebProxy _WP = new WebProxy("h00proxy", 80);
8 _WP.BypassProxyOnLocal = true;
9 NetworkCredential _CD = new NetworkCredential("davi xiong", "asdfad", "bqc");
10 _WP.Credentials = _CD;
11 return _WP;
12 }
13
14 private void Login(string strId, string strPassword)
15 {
16
17 ASCIIEncoding encodingA = new ASCIIEncoding();
18
19 CookieContainer myCookieContainer = new CookieContainer();
20
21 progressBar1.Value = 0; // Process
22 //=======GET================================================================================
23 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://s1.travian.china.com/login.php");
24 myRequest.Proxy = GetWP();
25
26 myRequest.CookieContainer = myCookieContainer;
27
28 progressBar1.Value = 10; // Process
29 HttpWebResponse myResponseA = (HttpWebResponse)myRequest.GetResponse();
30 StreamReader readerA = new StreamReader(myResponseA.GetResponseStream(), Encoding.Default);
31 string Getcontent = readerA.ReadToEnd();
32
33 progressBar1.Value = 20; // Process
34 Regex Reg = new Regex("<input type=\"hidden\" name=\"login\" value=\"(.*)\">");
35 string login = "";
36 if (Reg.IsMatch(Getcontent))
37 {
38 Match Mc = Reg.Matches(Getcontent)[0];
39 login = Mc.Groups[1].Value;
40 }
41 progressBar1.Value = 30; // Process
42
43 Reg = new Regex("<input class=\"fm fm110\" type=\"text\" name=\"(.*)\" value=");
44 string name = "";
45 if (Reg.IsMatch(Getcontent))
46 {
47 Match Mc = Reg.Matches(Getcontent)[0];
48 name = Mc.Groups[1].Value;
49 }
50
51 progressBar1.Value = 40; // Process
52 Reg = new Regex("<input class=\"fm fm110\" type=\"password\" name=\"(.*)\" value=");
53 string pass = "";
54 if (Reg.IsMatch(Getcontent))
55 {
56 Match Mc = Reg.Matches(Getcontent)[0];
57 pass = Mc.Groups[1].Value;
58 }
59
60 progressBar1.Value = 50; // Process
61 Reg = new Regex("<p align=\"center\"><input type=\"hidden\" name=\"(.*)\" value=\"(.*)\">");
62 string hid2name = "";
63 string hid2value = "";
64 if (Reg.IsMatch(Getcontent))
65 {
66 Match Mc = Reg.Matches(Getcontent)[0];
67 hid2name = Mc.Groups[1].Value;
68 hid2value = Mc.Groups[2].Value;
69 }
70
71 //=======DATA==========================================================
72 progressBar1.Value = 60; // Process
73 ASCIIEncoding encoding = new ASCIIEncoding();
74 string postData = name + "=" + strId;
75 postData += "&" + pass + "=" + strPassword;
76 postData += "&login=" + login;
77 postData += "&autologin=ja&" + hid2name + "=" + hid2value + "&w=1024:768";
78
79 byte[] data = encoding.GetBytes(postData);
80
81 //=======POST================================================================================
82 progressBar1.Value = 70; // Process
83 myRequest = (HttpWebRequest)WebRequest.Create("http://s1.travian.china.com/dorf1.php");
84 myRequest.Proxy = GetWP();
85
86 myRequest.Method = "POST";
87 myRequest.ContentType = "application/x-www-form-urlencoded";
88 myRequest.ContentLength = data.Length;
89 myRequest.CookieContainer = myCookieContainer;
90 Stream newStream = myRequest.GetRequestStream();
91 newStream.Write(data, 0, data.Length);
92 newStream.Close();
93
94 progressBar1.Value = 80; // Process
95 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
96 CCol = myCookieContainer.GetCookies(myRequest.RequestUri);
97 progressBar1.Value = 90; // Process
98 StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.Default);
99 string content = reader.ReadToEnd();
100
101 progressBar1.Value = 100; // Process
102 progressBar1.Value = 0; // Process
103 }
104
105 private void BtnLogin_Click(object sender, EventArgs e)
106 {
107 Login("davi97", "sffg");
108 }
109
110 //获取登录后才能查看的网页数据
111 private string GetPageData(string URL)
112 {
113 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
114 myRequest.Proxy = GetWP();
115
116 myRequest.CookieContainer = new CookieContainer();
117 myRequest.CookieContainer.Add(new Uri(URL), CCol);
118
119 HttpWebResponse myResponseA = (HttpWebResponse)myRequest.GetResponse();
120 StreamReader readerA = new StreamReader(myResponseA.GetResponseStream(), Encoding.Default);
121 return readerA.ReadToEnd();
122 }
123
124 private void BtnSearch_Click(object sender, EventArgs e)
125 {
126 string URL = "http://s1.travian.china.com/karte.php";
127 string ReqContent = GetPageData(URL);
128
129 //TODO : 自动搜索地图上的人员信息
130
131 }
132
133
平时无聊的朋友也可以玩玩,还是蛮有意思的,也可以找我,我的帐号是davi97