HttpWebRequest 模拟登录问题--在线等

cn1098035521 2011-03-20 11:18:22
//登录路径
string uriStr = "http://wo.zp365.com/public/loginZPGY.aspx";
//登录账号及密码(经验证没有错误)
string strId = "申请成功";
string strPassword = "369258147";
Encoding encoding = Encoding.GetEncoding("utf-8");
string postData = "__EVENTTARGET=";
postData += ("&__EVENTARGUMENT=");
postData += ("&__LASTFOCUS=");
postData += ("&___gathersOwner=");
postData += ("&__VIEWSTATE=/wEPDwULLTE0Nzg3Mzg0MDdkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYIBRhjdGwwMCRDb250ZW50UGFnZSR1c2VyMDEFGGN0bDAwJENvbnRlbnRQYWdlJHVzZXIwNQUYY3RsMDAkQ29udGVudFBhZ2UkdXNlcjA0BR1jdGwwMCRDb250ZW50UGFnZSRyYWRpb25VbmlvbgUdY3RsMDAkQ29udGVudFBhZ2UkcmFkaW9uVW5pb24FGGN0bDAwJENvbnRlbnRQYWdlJHVzZXIwMwUYY3RsMDAkQ29udGVudFBhZ2UkdXNlcjAyBSNjdGwwMCRDb250ZW50UGFnZSRJbWFnZUJ1dHRvbk93bmVyMQ==");
postData += ("&__EVENTVALIDATION=/wEWCgK2h8HNCQLL9pTeBwLgupWyCgKo46qxDAL+uKHaBQLwtbrgBwLBhqDPBgKz9+YEApjEiK4DAoePzpIJ");
postData += ("&ctl00$ContentPage$zp365tbLoginUserName=" + strId);
postData += ("&ctl00$ContentPage$zp365tbLoginPassword=" + strPassword);
postData += ("&ctl00$ContentPage$zp365drpLoginOldUser=user01");
postData += ("&ctl00$ContentPage$ImageButtonOwner1.x=78");
postData += ("&ctl00$ContentPage$ImageButtonOwner1.y=20");

byte[] data = encoding.GetBytes(postData);
HttpWebRequest myRequest =
(HttpWebRequest)WebRequest.Create(uriStr);
myRequest.Accept = "zh-CN";
myRequest.Method = "POST";
myRequest.ContentType = "text/html"; //当换成application/x-www-form-urlencoded时返回服务器错误,text/html返回原来登录的页面
myRequest.ContentLength = data.Length;
Stream newStream = myRequest.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();

// Get response
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"));
string content = reader.ReadToEnd();//返回结果


结果:
myRequest.ContentType = "text/html"; //当换成application/x-www-form-urlencoded时返回服务器错误,text/html返回原来登录的页面
请大家看看在哪出现问题!
...全文
730 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenhongxiahulong 2011-05-22
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 cn1098035521 的回复:]
引用 29 楼 fangxinggood 的回复:
测试代码:



C# code

string uriStr = "http://wo.zp365.com/public/loginZPGY.aspx";
string strId = "test0001";
string strPassword = "123456";

NameValueCollection postV……
[/Quote]


能不能将你HttpWebRequest 模拟登录问题测试成功的源码发我一份啊?急求,邮箱:hong.xia.1018@163.com
  • 打赏
  • 举报
回复
你这个问题不是昨天问过类似的么?

cn1098035521 2011-03-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xzf_fancy 的回复:]
用调试工具
[/Quote]

什么调试工具
cn1098035521 2011-03-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fangxinggood 的回复:]
"HTTP-500内部服务器错误"(500说明服务器干活了,但干的不对)
你看看是不是漏传什么参数了。
[/Quote]

参数没有少的,我用HttpWatch取的参数
xzf_fancy 2011-03-20
  • 打赏
  • 举报
回复
用调试工具
脾气不坏 2011-03-20
  • 打赏
  • 举报
回复
模拟登录 过一段可能用到
关注中·····
cn1098035521 2011-03-20
  • 打赏
  • 举报
回复
//去掉”=“后的代码是,你看下面对吗

string uriStr = "http://wo.zp365.com/public/loginZPGY.aspx";
string strId = "申请成功";
string strPassword = "369258147";
Encoding encoding = Encoding.GetEncoding("utf-8");
string postData = "__EVENTTARGET";
postData += ("&__EVENTARGUMENT");
postData += ("&__LASTFOCUS");
postData += ("&___gathersOwner");
postData += ("&__VIEWSTATE/wEPDwULLTE0Nzg3Mzg0MDdkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYIBRhjdGwwMCRDb250ZW50UGFnZSR1c2VyMDEFGGN0bDAwJENvbnRlbnRQYWdlJHVzZXIwNQUYY3RsMDAkQ29udGVudFBhZ2UkdXNlcjA0BR1jdGwwMCRDb250ZW50UGFnZSRyYWRpb25VbmlvbgUdY3RsMDAkQ29udGVudFBhZ2UkcmFkaW9uVW5pb24FGGN0bDAwJENvbnRlbnRQYWdlJHVzZXIwMwUYY3RsMDAkQ29udGVudFBhZ2UkdXNlcjAyBSNjdGwwMCRDb250ZW50UGFnZSRJbWFnZUJ1dHRvbk93bmVyMQ==");
postData += ("&__EVENTVALIDATION/wEWCgK2h8HNCQLL9pTeBwLgupWyCgKo46qxDAL+uKHaBQLwtbrgBwLBhqDPBgKz9+YEApjEiK4DAoePzpIJ");
postData += ("&ctl00$ContentPage$zp365tbLoginUserName" + strId);
postData += ("&ctl00$ContentPage$zp365tbLoginPassword" + strPassword);
postData += ("&ctl00$ContentPage$zp365drpLoginOldUseruser01");
postData += ("&ctl00$ContentPage$ImageButtonOwner1.x78");
postData += ("&ctl00$ContentPage$ImageButtonOwner1.y20");


//调用 HttpUtility.UrlEncode
this.textBox1.Text = RequestUrl(uriStr, postData, ref ck);
cn1098035521 2011-03-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fangxinggood 的回复:]
你这个问题不是昨天问过类似的么?

postData 要用HttpUtility.UrlEncode... 注意别把"="也编进去了。
[/Quote]


我刚刚把”=“删除了,不出错了,可是还是返回原来的页面,fangxinggood你登录这个网站看看,他不直接登录,好像又在那里打开一个页面一样!!!
机器人 2011-03-20
  • 打赏
  • 举报
回复
"HTTP-500内部服务器错误"(500说明服务器干活了,但干的不对)
你看看是不是漏传什么参数了。
cn1098035521 2011-03-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fangxinggood 的回复:]
你这个问题不是昨天问过类似的么?

postData 要用HttpUtility.UrlEncode... 注意别把"="也编进去了。
[/Quote]


这是另一个网站fangxinggood,我换了那种方式也是出错,服务器500的错误!
机器人 2011-03-20
  • 打赏
  • 举报
回复
你这个问题不是昨天问过类似的么?

postData 要用HttpUtility.UrlEncode... 注意别把"="也编进去了。
xu56180825 2011-03-20
  • 打赏
  • 举报
回复
你可以用VS的测试WEB的工具获取POST的数据。然后修改数据中的用户和密码就好了
myRequest.ContentType = "application/x-www-form-urlencoded“
cn1098035521 2011-03-20
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 fangxinggood 的回复:]
你登录后,访问别的页面有问题吗?
[/Quote]


保存cookie,这个我还没试过,我等下就试
机器人 2011-03-20
  • 打赏
  • 举报
回复
你登录后,访问别的页面有问题吗?
cn1098035521 2011-03-20
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 fangxinggood 的回复:]
对了,服务端检查 User-Agent,如果Header没有这个就报500错误。
所以你用HttpWebRequest也好,还是用WebClient也好,别忘了加上。

HttpWebRequest: req.UserAgent = "Mozilla/4.0";
[/Quote]

嗯,好的,感谢你的帮助,我这个试了很久不得,对了你能保持登录状态吗
cn1098035521 2011-03-20
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 fangxinggood 的回复:]
测试代码:



C# code

string uriStr = "http://wo.zp365.com/public/loginZPGY.aspx";
string strId = "test0001";
string strPassword = "123456";

NameValueCollection postVars = new NameValueCollecti……
[/Quote]



可以了,太感谢fangxinggood了
机器人 2011-03-20
  • 打赏
  • 举报
回复
对了,服务端检查 User-Agent,如果Header没有这个就报500错误。
所以你用HttpWebRequest也好,还是用WebClient也好,别忘了加上。

HttpWebRequest: req.UserAgent = "Mozilla/4.0";
机器人 2011-03-20
  • 打赏
  • 举报
回复
测试代码:



string uriStr = "http://wo.zp365.com/public/loginZPGY.aspx";
string strId = "test0001";
string strPassword = "123456";

NameValueCollection postVars = new NameValueCollection();
var postData = new NameValueCollection();
postData.Add("__EVENTTARGET", "");
postData.Add("__EVENTARGUMENT", "");
postData.Add("__LASTFOCUS", "");
postData.Add("___gathersOwner", "");
postData.Add("__VIEWSTATE", "/wEPDwULLTE0Nzg3Mzg0MDdkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYIBRhjdGwwMCRDb250ZW50UGFnZSR1c2VyMDEFGGN0bDAwJENvbnRlbnRQYWdlJHVzZXIwNQUYY3RsMDAkQ29udGVudFBhZ2UkdXNlcjA0BR1jdGwwMCRDb250ZW50UGFnZSRyYWRpb25VbmlvbgUdY3RsMDAkQ29udGVudFBhZ2UkcmFkaW9uVW5pb24FGGN0bDAwJENvbnRlbnRQYWdlJHVzZXIwMwUYY3RsMDAkQ29udGVudFBhZ2UkdXNlcjAyBSNjdGwwMCRDb250ZW50UGFnZSRJbWFnZUJ1dHRvbk93bmVyMQ==");
postData.Add("__EVENTVALIDATION", "/wEWCgK2h8HNCQLL9pTeBwLgupWyCgKo46qxDAL+uKHaBQLwtbrgBwLBhqDPBgKz9+YEApjEiK4DAoePzpIJ");
postData.Add("ctl00$ContentPage$zp365tbLoginUserName", strId);
postData.Add("ctl00$ContentPage$zp365tbLoginPassword", strPassword);
postData.Add("ctl00$ContentPage$zp365drpLoginOldUser", "user01");
postData.Add("ctl00$ContentPage$ImageButtonOwner1.x", "50");
postData.Add("ctl00$ContentPage$ImageButtonOwner1.y", "14");

var client = new WebClient();
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
client.Headers.Add("User-Agent", "Mozilla/4.0");
var data = client.UploadValues(uriStr, "POST", postData);
this.textBox1.Text = System.Text.Encoding.UTF8.GetString(data);

if (this.textBox1.Text.Contains("用户或者密码错误!"))
MessageBox.Show("Failure");
else if (this.textBox1.Text.Contains("已经登录1,2,3,4,5,6,7,8,5"))
MessageBox.Show("Success");
机器人 2011-03-20
  • 打赏
  • 举报
回复
祭出 Fiddler 试了半天,这个网站就这样的,成功也是返回本页。

如果用户名/密码不对,在返回的Response里会有如下脚本:
<script language=JavaScript>alert('用户或者密码错误!')</script>


如果成功,会有: “已经登录1,2,3,4,5,6,7,8,5”


cn1098035521 2011-03-20
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 fangxinggood 的回复:]
恩,的确很奇怪。。。

我模拟的Stream和httpWatch弄的结果一样的,也还是失败。(500错误)

__EVENTTARGET=&__EVENTARGUMENT=&__LASTFOCUS=&___gathersOwner=&__VIEWSTATE=%2FwEPDwULLTE0Nzg3Mzg0MDdkGAEFHl9fQ29udHJvbHNSZXF1a……
[/Quote]

看来这个网站又是高手所为!!
加载更多回复(16)

110,589

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧