一、原因
闲的无聊没事总上开心网( http://www.kaixin001.com)的农场去种种地、偷偷成熟的植物和动物幼崽。用IE打开网站需要时不时的去刷新才能知道是否可以偷了,是否可以收获了等等,十分麻烦不方便,而且还容易错过(被别人抢先偷走)。基于此原因,打算自己写个小程序完成这些任务。
二、实现的初步成果
开发时间进行了一天,初步成果介绍:用户登录、自己菜地的植物成熟列表及其名称,有成熟植物的好友列表。
三、程序开发重点
1. 语言采用c#,该语言开发周期短
2. 需要了解或者利用其他手段来获知菜地的各种属性值,利用该值作为信息显示和判断的依据。
3. 模拟http的POST、GET方法,以及cookie的使用和获得。因为这个关系到网站模拟登录以及登录后的操作。
4. Unicode编码文字转换为正常显示
5. 登录过程中,验证码的获得和提交
6. XML解析,难点是指定子节点,获得该子节点的值。
7. 正则表达式,使用正则来获得需要的信息,避免使用indexof来搜索。
四、模块介绍
1. 登录
1)使用HttpWebRequest来实现模拟POST登录,并获得cookie
res = (HttpWebResponse) req.GetResponse();
strKaixinCookie = req.CookieContainer.GetCookieHeader(new Uri(url)); 2)使用cookie
CookieContainer cookieCon = new CookieContainer();
httpWebRequest.CookieContainer = cookieCon; string [] Cookies=strKaixinCookie.Split(";".ToCharArray());
foreach(string cookie in Cookies)
{
httpWebRequest.CookieContainer.SetCookies(new Uri(url), cookie);
} 2. 登录验证码
因为一直在测试程序,导致每次登陆都会提示我输入图片形式的验证码。这里没有采用文字识别,而是提示给用户,让用户自己输入。
获得验证码图片,一定要注意否则输入的验证码信息提交上去后无效。
http://www.kaixin001.com/interface/regcreatepng.php?randnum=自己创建的随机串norect=1
带验证码提交的串
invisible_mode=0&rcode=与验证码相一致的随机串(必须一样否则不能验证失败)&url=//&email=password=&code=验证码
3. 一些URL
登录者的菜地信息
http://www.kaixin001.com/!house/!garden/getconf.php?fuid=0&r=时间戳
成熟的好友列表
http://www.kaixin001.com/!house/!garden/getfriendmature.php?verify=身份验证唯一标识&r=时间戳
好友菜地
http://www.kaixin001.com/!house/!garden//getconf.php?fuid=好友的UserID&r=时间戳
4. 正则表达式
regex = new Regex("realname/":/"(.+?)/"",RegexOptions.Singleline);
iEnumerator = regex.Matches(strResult).GetEnumerator(); try
{
while (iEnumerator.MoveNext())
{
str+= NormalU2C(((Match)iEnumerator.Current).Groups[1].Value.ToString()) + "/r/n";
}
}
finally
{
IDisposable iDisposable = iEnumerator as IDisposable;
if (iDisposable != null)
{
iDisposable.Dispose();
}
} 5. XML操作
nodeList = doc.SelectNodes("/conf/garden/item");
foreach (XmlNode node in nodeList)
{
XmlNode subNode=node.SelectSingleNode("name");
if (subNode!=null)
{
string strName= subNode.InnerText;
string strProduct=node.SelectSingleNode("crops").InnerText;
str+=strName + " /r/n";
}
}五、暂告一段落
闲的无聊没事总上开心网( http://www.kaixin001.com)的农场去种种地、偷偷成熟的植物和动物幼崽。用IE打开网站需要时不时的去刷新才能知道是否可以偷了,是否可以收获了等等,十分麻烦不方便,而且还容易错过(被别人抢先偷走)。基于此原因,打算自己写个小程序完成这些任务。
二、实现的初步成果
开发时间进行了一天,初步成果介绍:用户登录、自己菜地的植物成熟列表及其名称,有成熟植物的好友列表。
三、程序开发重点
1. 语言采用c#,该语言开发周期短
2. 需要了解或者利用其他手段来获知菜地的各种属性值,利用该值作为信息显示和判断的依据。
3. 模拟http的POST、GET方法,以及cookie的使用和获得。因为这个关系到网站模拟登录以及登录后的操作。
4. Unicode编码文字转换为正常显示
5. 登录过程中,验证码的获得和提交
6. XML解析,难点是指定子节点,获得该子节点的值。
7. 正则表达式,使用正则来获得需要的信息,避免使用indexof来搜索。
四、模块介绍
1. 登录
1)使用HttpWebRequest来实现模拟POST登录,并获得cookie
res = (HttpWebResponse) req.GetResponse();
strKaixinCookie = req.CookieContainer.GetCookieHeader(new Uri(url)); 2)使用cookie
CookieContainer cookieCon = new CookieContainer();
httpWebRequest.CookieContainer = cookieCon; string [] Cookies=strKaixinCookie.Split(";".ToCharArray());
foreach(string cookie in Cookies)
{
httpWebRequest.CookieContainer.SetCookies(new Uri(url), cookie);
} 2. 登录验证码
因为一直在测试程序,导致每次登陆都会提示我输入图片形式的验证码。这里没有采用文字识别,而是提示给用户,让用户自己输入。
获得验证码图片,一定要注意否则输入的验证码信息提交上去后无效。
http://www.kaixin001.com/interface/regcreatepng.php?randnum=自己创建的随机串norect=1
带验证码提交的串
invisible_mode=0&rcode=与验证码相一致的随机串(必须一样否则不能验证失败)&url=//&email=password=&code=验证码
3. 一些URL
登录者的菜地信息
http://www.kaixin001.com/!house/!garden/getconf.php?fuid=0&r=时间戳
成熟的好友列表
http://www.kaixin001.com/!house/!garden/getfriendmature.php?verify=身份验证唯一标识&r=时间戳
好友菜地
http://www.kaixin001.com/!house/!garden//getconf.php?fuid=好友的UserID&r=时间戳
4. 正则表达式
regex = new Regex("realname/":/"(.+?)/"",RegexOptions.Singleline);
iEnumerator = regex.Matches(strResult).GetEnumerator(); try
{
while (iEnumerator.MoveNext())
{
str+= NormalU2C(((Match)iEnumerator.Current).Groups[1].Value.ToString()) + "/r/n";
}
}
finally
{
IDisposable iDisposable = iEnumerator as IDisposable;
if (iDisposable != null)
{
iDisposable.Dispose();
}
} 5. XML操作
nodeList = doc.SelectNodes("/conf/garden/item");
foreach (XmlNode node in nodeList)
{
XmlNode subNode=node.SelectSingleNode("name");
if (subNode!=null)
{
string strName= subNode.InnerText;
string strProduct=node.SelectSingleNode("crops").InnerText;
str+=strName + " /r/n";
}
}五、暂告一段落