首页新闻找找看学习计划

C#模拟登录

0
悬赏园豆:50 [已解决问题] 解决于 2011-02-12 11:06

1.自己设计的一个登录页面,两个TextBox(txtName,txtPwd)框和一个Button,Button事件中设置(

protected void Button1_Click(object sender, EventArgs e)
{
if (txtName.Text == "fxl" && txtPwd.Text == "123")
{
Response.Redirect(
"Main.aspx");
}
}

2.添加一个控制台程序:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Net;
using System.Web;
using System.IO;
using System.Collections;

namespace 模拟登录
{
class Program
{
public static CookieContainer cc = new CookieContainer();

static void Main(string[] args)
{
CookieContainer cc
= new CookieContainer();//this is for keep the Session and Cookie

Hashtable param
= new Hashtable();//this is for keep post data.

//这个地址是我自己IIS上的地址
string urlLogin = "http://www.my.com/CS.aspx";

param.Add(
"txtName", "fxl");

param.Add(
"txtPwd", "123");

string result = PostAndGetHTML(urlLogin,ref cc, param);


Console.WriteLine(result);



}

public static string PostAndGetHTML(string targetURL,ref CookieContainer cc, Hashtable param)

{
string formData = "";

foreach (DictionaryEntry de in param)

{

formData
+= de.Key.ToString() + "=" + de.Value.ToString()+"&";

}

if(formData.Length>0)

formData
= formData.Substring(0, formData.Length - 1); //remove last '&'


ASCIIEncoding encoding
= new ASCIIEncoding();

byte[] data = encoding.GetBytes(formData);


HttpWebRequest request
= (HttpWebRequest)WebRequest.Create(targetURL);

request.Method
= "POST"; //post

request.ContentType
= "application/x-www-form-urlencoded";

request.ContentLength
= data.Length;

request.UserAgent
= "Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)";

Stream newStream
= request.GetRequestStream();

newStream.Write(data,
0, data.Length);


newStream.Close();


request.CookieContainer
= cc;

HttpWebResponse response
= (HttpWebResponse)request.GetResponse();

cc.Add(response.Cookies);

Stream stream
= response.GetResponseStream();

string result = new StreamReader(stream, System.Text.Encoding.UTF8).ReadToEnd();

return result;

}
}
}

问题1.但是获取的源代码总是登录页面的,请大家看看怎么才能获得登录后页面的源代码

2.POST数据用不用加上Button1这个参数,我是使用Firefox中的firebug获取页面的POST信息的

问题补充: 一楼您好,我又添加了 request.AllowAutoRedirect = true; 但是还是获得不了,使用HttpWebRequest时POST中的参数 要几个啊? 1. txtName txtPwd ?(Button 和EVENTVALIDATION 和VIEWSTATE需要不)
爱上鸟儿的主页 爱上鸟儿 | 初学一级 | 园豆:180
提问于:2011-02-12 09:48
< >
分享
最佳答案
0

HttpWebRequest默认好像是不支持Redirect的,你需要设置AllowAutoRedirect为true才能取到跳转后的页面源码。

如果你的代码是写在button的click事件中的话,可能还需要传递一些asp.net自动生成的viewstate数据,你可以用firebug查看一下点击按钮后提交了哪些数据。

建议你直接判断页面的请求方式来做登录,比如:

if (Request.RequestType == "POST") {

if (Request.Form["txtName"] == "fxl" && Request.Form["txtPwd"] == "123") {
Response.Redirect(
"Main.aspx");
}

}

 

这样就不用考虑viewstate的问题。

收获园豆:50
I,Robot | 大侠五级 |园豆:9461 | 2011-02-12 10:35
刚才测试了下成功了, 谢谢帮助
爱上鸟儿 | 园豆:180 (初学一级) | 2011-02-12 11:06
其他回答(2)
1

怎么博客园的博问不能收藏呢,Mark一下

FrankFang | 园豆:241 (菜鸟二级) | 2011-02-13 19:54
0

Mark,Test!

Gamain | 园豆:357 (菜鸟二级) | 2012-11-19 11:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册