当前位置:编程学习 > C#/ASP.NET >>

C# POST问题。

C# POST提交数据一直返回用户名和密码不能为空。求帮我看看提交的数据是怎么回事。
string vm = GetVM_VM1();
            string[] vm_ = vm.Split(',');
            HttpWebRequest request = null;
            HttpWebResponse response = null;
            CookieContainer ck = null;
            Stream sm = null;
            string url = "http://www.yuanmeng28.com/member/Checkpass3.asp";
            string PostData = "email=" + name + "&emailFlag=1&password=" + pwd + "&code=" + code + "&wm=" + vm_[0] + "&sn=&wm1=" + vm_[1] + "&sn1=&sum=登录"; 
            //string PostData = "email=" + name + "&emailFlag=1&password=" + pwd + "&code=" + code + "&wm=F4&sn=&wm1=B2&sn1=&image.x=29&image.y=8";
            request = (HttpWebRequest)HttpWebRequest.Create(url);
            //request.ContentType = "application/x-www-form-urlencoded";
            request.Referer = "http://www.yuanmeng28.com/";
            request.Accept = "text/html, application/xhtml+xml, */*";
            request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; qdesk 2.5.1277.202; Windows NT 6.1; WOW64; Trident/6.0)";
            request.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";
            request.CookieContainer = ck;
            request.Method = "POST";
            byte[] b = Encoding.UTF8.GetBytes(PostData);//将提交数据转换为字节集数组
            request.AllowAutoRedirect = true;
            request.ContentLength = b.Length;
            sm = request.GetRequestStream();
            sm.Write(b, 0, b.Length);//提交数据
            response = (HttpWebResponse)request.GetResponse();
            sm = response.GetResponseStream();
            StreamReader sr = new StreamReader(sm, Encoding.Default);
            string mess = sr.ReadToEnd();
            sm.Close();
            sr.Close();
            return mess;
C# POST --------------------编程问答-------------------- 最简单的办法,你下个httpAnylize抓包工具,你手工登录网站抓下包看下post的数据是什么样的,在模仿它来post就OK了 --------------------编程问答-------------------- 你需要先get http://www.yuanmeng28.com/,让CookieContainer 得到cookie
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/ --------------------编程问答-------------------- 加上
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = b.Length;
看看 --------------------编程问答--------------------
引用 3 楼 caozhy 的回复:
加上
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = b.Length;
看看

这个我试过,加了之后怎么弄都提示验证码错误。。不加这个提示用户名和密码不能为空 --------------------编程问答--------------------
引用 1 楼 xiaozhu39505 的回复:
最简单的办法,你下个httpAnylize抓包工具,你手工登录网站抓下包看下post的数据是什么样的,在模仿它来post就OK了

"email=" + name + "&emailFlag=1&password=" + pwd + "&code=" + code + "&wm=" + vm_[0] + "&sn=&wm1=" + vm_[1] + "&sn1=&sum=登录"; 
这个就是抓的数据包。里面的变量是原本的内容 --------------------编程问答--------------------
引用 4 楼 liujunjia_9418 的回复:
Quote: 引用 3 楼 caozhy 的回复:

加上
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = b.Length;
看看

这个我试过,加了之后怎么弄都提示验证码错误。。不加这个提示用户名和密码不能为空


那说明不加的问题比加了更严重,前者好歹数据提交上去了,验证码不对。
验证码不对的可能原因是,你没有附加正确的cookie,或者我不知道你怎么识别的图像,反正你识别的不是你请求的时候服务器给你的那个。 --------------------编程问答--------------------
引用 6 楼 caozhy 的回复:
Quote: 引用 4 楼 liujunjia_9418 的回复:

Quote: 引用 3 楼 caozhy 的回复:

加上
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = b.Length;
看看

这个我试过,加了之后怎么弄都提示验证码错误。。不加这个提示用户名和密码不能为空


那说明不加的问题比加了更严重,前者好歹数据提交上去了,验证码不对。
验证码不对的可能原因是,你没有附加正确的cookie,或者我不知道你怎么识别的图像,反正你识别的不是你请求的时候服务器给你的那个。

验证码是直接从网站的地址获取的,手动输入。验证码应该不会出问题的。。头大了。。 --------------------编程问答--------------------
引用 7 楼 liujunjia_9418 的回复:
Quote: 引用 6 楼 caozhy 的回复:

Quote: 引用 4 楼 liujunjia_9418 的回复:

Quote: 引用 3 楼 caozhy 的回复:

加上
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = b.Length;
看看

这个我试过,加了之后怎么弄都提示验证码错误。。不加这个提示用户名和密码不能为空


那说明不加的问题比加了更严重,前者好歹数据提交上去了,验证码不对。
验证码不对的可能原因是,你没有附加正确的cookie,或者我不知道你怎么识别的图像,反正你识别的不是你请求的时候服务器给你的那个。

验证码是直接从网站的地址获取的,手动输入。验证码应该不会出问题的。。头大了。。


直接获取的不错,但是你要知道,你每次获取(如果不带上相同的cookie)都会造成验证码的刷新。因此提交验证的那个验证码和你看到的那个不是一个,当然验证失败。 --------------------编程问答--------------------
引用 8 楼 caozhy 的回复:
Quote: 引用 7 楼 liujunjia_9418 的回复:

Quote: 引用 6 楼 caozhy 的回复:

Quote: 引用 4 楼 liujunjia_9418 的回复:

Quote: 引用 3 楼 caozhy 的回复:

加上
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = b.Length;
看看

这个我试过,加了之后怎么弄都提示验证码错误。。不加这个提示用户名和密码不能为空


那说明不加的问题比加了更严重,前者好歹数据提交上去了,验证码不对。
验证码不对的可能原因是,你没有附加正确的cookie,或者我不知道你怎么识别的图像,反正你识别的不是你请求的时候服务器给你的那个。

验证码是直接从网站的地址获取的,手动输入。验证码应该不会出问题的。。头大了。。


直接获取的不错,但是你要知道,你每次获取(如果不带上相同的cookie)都会造成验证码的刷新。因此提交验证的那个验证码和你看到的那个不是一个,当然验证失败。

那我加载页面的时候获取页面的cook,登录的时候
request.Headers["Cookie"] = cookies;
这样把cook附加进去行么? --------------------编程问答--------------------
引用 8 楼 caozhy 的回复:
Quote: 引用 7 楼 liujunjia_9418 的回复:

Quote: 引用 6 楼 caozhy 的回复:

Quote: 引用 4 楼 liujunjia_9418 的回复:

Quote: 引用 3 楼 caozhy 的回复:

加上
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = b.Length;
看看

这个我试过,加了之后怎么弄都提示验证码错误。。不加这个提示用户名和密码不能为空


那说明不加的问题比加了更严重,前者好歹数据提交上去了,验证码不对。
验证码不对的可能原因是,你没有附加正确的cookie,或者我不知道你怎么识别的图像,反正你识别的不是你请求的时候服务器给你的那个。

验证码是直接从网站的地址获取的,手动输入。验证码应该不会出问题的。。头大了。。


直接获取的不错,但是你要知道,你每次获取(如果不带上相同的cookie)都会造成验证码的刷新。因此提交验证的那个验证码和你看到的那个不是一个,当然验证失败。
我把提交的数据中的验证码去掉后,居然登录成功了,
这个是现在的
string PostData = "email=" + name + "&emailFlag=1&password=" + pwd + "&wm=D1&sn=&wm1=F2&sn1=&sum=%B5%C7%C2%BD";

这个是之前的:
string PostData = "email=" + name + "&emailFlag=1&password=" + pwd + "&code=" + code + "wm=D1&sn=&wm1=F2&sn1=&sum=%B5%C7%C2%BD"; 

可是我抓的数据包中确实提交了验证码。无法理解了。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,