|
楼主 |
发表于 2013-11-2 20:42:58
|
显示全部楼层
本帖最后由 mouse_ding 于 2013-11-3 10:28 编辑
又弄了一天,早上进了一步,但是后来就不行了。求助啊。
网站的登录的详细步骤和代码:
[code=csharp]
private HttpHelper httpHelper = new HttpHelper();
private HttpResult result = new HttpResult();
string cookie;
string loginCookie;
[/code]
1.登录页面:
[code=csharp]
url="http://passport.artron.net/MemberCenter/RegLogin.php"
result = httpHelper.GetHtml(new HttpItem { URL = url});
loginCookie = result.Cookie;
[/code]
2.获取验证码图片:
[code=csharp]
url="http://passport.artron.net/MemberCenter/code.php?"
result = httpHelper.GetHtml(new HttpItem
{
URL = Config.ValidCodeUrl + new Random().NextDouble(),
Accept = "image/png",
ResultType = ResultType.Byte,
Cookie=loginCookie
});
MemoryStream ms = new MemoryStream(result.ResultByte);
picCheckCode.Image = Image.FromStream(ms, true);
ms.Close();
[/code]
3.post登录(用户名、密码写死在代码里):
[code=csharp]
url="http://passport.artron.net/MemberCenter/RegLogin.php"
result = httpHelper.GetHtml(new HttpItem
{
URL=url,
Method="POST",
ContentType="application/x-www-form-urlencoded",
Postdata="UserName=%E4%B8%81%E6%9C%97&Pwd=yc85032808&CheckCode="+tbValidCode.Text.Trim()+"&IsPostBack=1&SourceAppId=2&login.php&IsRegLogin=&x=48&y=16",
Cookie=loginCookie
});
[/code]
4.获取登录返回结果(结果中只有一句脚本,发起了一个连接),截取其中的url,get:
[code=csharp]
url = new Regex(@"href=""(?<url>[^""]*)""").Match(result.Html).Groups["url"].Value;
result = httpHelper.GetHtml(new HttpItem
{
URL = url,
Cookie = loginCookie,
});
[/code]
5.再获取上面返回页面结果(是一个复杂的脚本,发起了三个连接,分别登录网站、论坛、博客),截取3个连接,分别get。2-4步均未产生其他cookie,故一直用loginCookie
[code=csharp]
mc = new Regex(@"(""Src""\s*:\s*""(?<url>[^""]*)"")").Matches(result.Html);
foreach (Match m in mc)
{
url = m.Groups["url"].Value.Replace("\\", "") + "&num=" + (r.NextDouble() * 340 + 115).ToString();
result = httpHelper.GetHtml(new HttpItem
{
URL = url,
ContentType = "application/javascript",
Cookie = loginCookie,
});
if (result.Cookie != null)
cookie += "," + result.Cookie;
}
[/code]
这一步中三个访问得到的cookie,连接起来放到了cookie变量里,不知这样操作对不对。
6.第五步的前两个页面没有返回结果,得到了相应的cookie;最后一个网页返回得到脚本,脚本中再次发起四个连接,分别截取url,get:
[code=csharp]
mc = new Regex(@"(.src\s*=\s*""(?<url>[^""]*)"")").Matches(result.Html);
foreach (Match m in mc)
{
url = m.Groups["url"].Value;
result = httpHelper.GetHtml(new HttpItem
{
URL = url,
ContentType = "application/javascript",
Cookie = loginCookie,
});
if (result.Cookie != null )
cookie += "," + result.Cookie;
}
cookie = cookie.Substring(1);
[/code]
7. 进入用户中心之前的跳转页。第6步得到了一些cookie再次连接到了cookie里。同时,第6步的其中一个网页返回的仍然是脚本,发起连接,而且还会进一步再得到脚本发起连接,测试后发现貌似不需要再继续下去了,可以进入到用户中心之前的跳转页了。
[code=csharp]
result = httpHelper.GetHtml(new HttpItem
{
URL = "http://passport.artron.net/MemberCenter/Location.php?TransferUrl=http://passport.artron.net/MemberCenter/index.php",
Cookie = loginCookie,
});
8.进入用户中心
[code=csharp]
result = httpHelper.GetHtml(new HttpItem
{
URL = "http://passport.artron.net/MemberCenter/index.php",
Cookie = loginCookie,
});
[/code]
得到的结果已经进入到了用户中心,显示了用户名、欢迎词等。说明登录成功。
9.进入网站相关页面,检查是否可以查看登录用户可见的数据
[code=csharp]
result = httpHelper.GetHtml(new HttpItem
{
URL = "http://auction.artron.net/result/pmp-0137-0-0-2-0-0-1/",
Cookie = cookie,
});
[/code]
得到的结果是,登录用户可见数据仍然不可见,显示“登录后可查看”。将此处的cookie换成loginCookie,结果一样。换成cookie连接上loginCookie,结果也一样。
10. 一个测试是否登录的页面。网站的头部显示用户信息的部分是个ajax请求的页面,直接访问该页面,登录后会显示用户信息,否则显示登录表单。
[code=csharp]
result = httpHelper.GetHtml(new HttpItem
{
URL = "http://www.artron.net/member/login.php",
Cookie = cookie,
});
[/code]
结果是登录表单。同样,cookie换成loginCookie还是cookie连接上loginCookie都一样。
请教哪里出问题了。这个网站的登录还真烦。 |
|