选取测试对象
就是他了,主要是根据可靠情报,他的登录是十分简单的,比较适合练手.
准备的工具
IE,Win7自带
记事本
收集模拟登录数据
为了不被旧的数据影响,第一步就是清空缓冲数据,不过根据实际测试IE开发者工具自带的菜单命令根本不可靠,还是直接手动进入到缓冲文件夹手动del好.
F12进入开发者工具,切换到网络选项页,F5启用捕获。进入登录页面,填入自己的账号,密码,点登录,这时就可以看到捕获很多网络请求。
其中靠前的发现有一个https://www.oschina.net/action/user/hash_login
地址很是可疑,一看是post方式的,双击进入详细信息,可以看到请求正文有你的用户名密码什么的,但是密码是一串奇怪的字串不知道是什么,那么就用“pwd”作为关键字在捕获的请求中搜下好了,结果有好几个,ccs肯定不是,js才有可能,点下一个几次后然后发现这个东西,sha1,哦,找个在线摘要转换页看看我的密码的sha1,其结果一样。
接下来的还有个verifyCode=&save_login=1什么的明显是验证码和保存登录什么的,照着填就行了,到此,所有的数据收集完成,总结下。
向https://www.oschina.net/action/user/hash_login发送post请求,其内容是:
"email={0}&pwd={1}&verifyCode=&save_login=1",user,sha1(pwd);成功会返回一个oscid给你存在cookie中,相应正文空,失败相应正文会有一段json给你,告诉你登录失败了.
用你熟悉的语言整一个模拟登录程序
我的是这样的.
class CLoginOsChina
{
private CookieContainer m_Cookie=new CookieContainer();
public bool Login(string user,string pwd)
{
bool bRet = false;
HttpWebRequest req=(HttpWebRequest)
WebRequest.Create(@"https://www.oschina.net/action/user/hash_login");
req.CookieContainer = m_Cookie;
//req.CookieContainer.Add(m_Cookie);
req.Method="POST";
req.ContentType = "application/x-www-form-urlencoded";
string sha1=KLib.CryptKit.SHA1(pwd).ToLower();
StringBuilder pdata=new StringBuilder();
//email=qqq&pwd=a056c8d05ae9ac6ca180bc991b93b7ffe37563e0&verifyCode=&save_login=1
pdata.AppendFormat("email={0}&pwd={1}&verifyCode=&save_login=1", user, sha1);
//byte[] postBytes = Encoding.UTF8.GetBytes(pdata.ToString());
//req.ContentLength = postBytes.Length;
using (StreamWriter sw = new StreamWriter(req.GetRequestStream()))
{
sw.Write(pdata.ToString());
sw.Flush();
}
//Stream postDataStream = req.GetRequestStream();
//postDataStream.Write(postBytes, 0, postBytes.Length);
//postDataStream.Close();
//got response
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
foreach (Cookie o in resp.Cookies)
{
if (o.Name == "oscid")
{
Console.WriteLine("登陆成功");
bRet = true;
return bRet;
}
}
Console.WriteLine("登陆失败,失败信息是");
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
string loginBaiduRespHtml = sr.ReadToEnd();
System.Console.Out.WriteLine(loginBaiduRespHtml);
}
bRet = false;
return bRet;
}
}
最后,主页居然有没有处理的错误,茶品