string strurl = "http://www.clicksaya.com/website/default.aspx"; string postData = "ctl00$ContentPlaceHolder1$websiteLogin1$tbUsername=tencent@vip.qq.com&ctl00$ContentPlaceHolder1$websiteLogin1$tbPassword=111111&__EVENTVALIDATION=/wEWCAKg48mdDwLwptrHBQKevaaZCAKH1uKjCgLAkIr5BALfmYj5BALNws3TBgKy3p7hAVb6TE/A0Hu49JhH/87U1q1++i+8&__VIEWSTATE=/wEPDwUKMTA2NjEzMTQ5N2QYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgMFNGN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkd2Vic2l0ZUxvZ2luMSRJbWFnZUJ1dHRvbjEFMmN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkd2Vic2l0ZUxvZ2luMSRjYlJlbWVtYmVyBS9jdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJHdlYnNpdGVMb2dpbjEkaWJMb2dpbr835ABpAJS3gOqaobgPreac5MNP&ctl00$sm=ctl00$up1|ctl00$ContentPlaceHolder1$websiteLogin1$ibLogin&__ASYNCPOST=true";
HttpWebRequest reqt = (HttpWebRequest)WebRequest.Create(strurl);
CookieContainer myCookieContainer = new CookieContainer();
reqt.CookieContainer = myCookieContainer;
cookieheader = reqt.CookieContainer.GetCookieHeader(new Uri(strurl));
reqt.Method = "POST";
reqt.ContentType = "application/x-www-form-urlencoded";
reqt.AllowAutoRedirect = true;
byte[] strbyte = Encoding.UTF8.GetBytes(postData);
Stream strm = reqt.GetRequestStream();
strm.Write(strbyte, 0, strbyte.Length);
strm.Close();
HttpWebResponse resp = (HttpWebResponse)reqt.GetResponse();
HttpWebRequest reqt = (HttpWebRequest)WebRequest.Create(strurl);
CookieContainer myCookieContainer = new CookieContainer();
reqt.CookieContainer = myCookieContainer;
cookieheader = reqt.CookieContainer.GetCookieHeader(new Uri(strurl));
reqt.Method = "POST";
reqt.ContentType = "application/x-www-form-urlencoded";
reqt.AllowAutoRedirect = true;
byte[] strbyte = Encoding.UTF8.GetBytes(postData);
Stream strm = reqt.GetRequestStream();
strm.Write(strbyte, 0, strbyte.Length);
strm.Close();
HttpWebResponse resp = (HttpWebResponse)reqt.GetResponse();
解决方案 »
- 对泛型类list<T>内元素的排序用法,注意:T为一个类,不是单一字符串
- gridview.emptydatatemplate.detailsview.textbox如何赋值
- XTraReports 如何添加数据源
- 关于曲线拟合,C#!!请各位大虾指点迷津!!谢谢!!!
- ===散分!!!因为气愤===
- 窗口切换的参数传递问题
- 线程池疑问
- 急,在线等待,,,实现局域网内两台机器的目录文件同步,为什么我做了一个WIN服务安装的时候出错,大家帮我看看???(吐血分,分不够
- 使用Process.Start启动一个外部exe程序如何使它最小化?
- 简单问题:textbox设为password时,如何在程序里赋值?
- 全局变量问题
- 简单问题
reqt.CookieContainer = myCookieContainer;
这样老感觉没意义,因为前面没给值,后面又没有用到。。
{
byte[] bdata = Encoding.Default.GetBytes(postData);
System.Net.HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(loginUrl);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
myRequest.Referer = loginUrl;
myRequest.KeepAlive = true;
myRequest.AllowAutoRedirect = true;
if (cookieContainer == null)
cookieContainer = new CookieContainer();
myRequest.CookieContainer = cookieContainer;
myRequest.ContentLength = bdata.Length;
Stream newStream = myRequest.GetRequestStream();
newStream.Write(l_data, 0, bdata.Length);
newStream.Close();
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("GB2312"));
string content = reader.ReadToEnd();
return content;
}
reqt.CookieContainer = myCookieContainer;
cookieheader = reqt.CookieContainer.GetCookieHeader(new Uri(strurl));
刚创建的CookieContainer是空的,不会有任何值在里面要取得返回的Cookie 在request.GetResponse以后用HttpWebResponse.Cookies楼上代码Stream newStream = myRequest.GetRequestStream();
newStream.Write(l_data, 0, bdata.Length);
newStream.Close(); Close不自动Flush需要手动
请问这是什么原因?
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); 报500错误了。请问一下,这是怎么回事呢?
ctl00$ContentPlaceHolder1$websiteLogin1$tbUsername asdf
ctl00$ContentPlaceHolder1$websiteLogin1$tbPassword
ctl00$ContentPlaceHolder1$websiteLogin1$tbwe1_ClientState
ctl00$ContentPlaceHolder1$websiteLogin1$tbwe2_ClientState
__LASTFOCUS
__VIEWSTATE /wEPDwUKMTA2NjEzMTQ5N2QYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgMFNGN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkd2Vic2l0ZUxvZ2luMSRJbWFnZUJ1dHRvbjEFMmN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkd2Vic2l0ZUxvZ2luMSRjYlJlbWVtYmVyBS9jdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJHdlYnNpdGVMb2dpbjEkaWJMb2dpbr835ABpAJS3gOqaobgPreac5MNP
__EVENTTARGET
__EVENTARGUMENT
__EVENTVALIDATION /wEWCAKg48mdDwLwptrHBQKevaaZCAKH1uKjCgLAkIr5BALfmYj5BALNws3TBgKy3p7hAVb6TE/A0Hu49JhH/87U1q1++i+8
__ASYNCPOST true
ctl00$ContentPlaceHolder1$websiteLogin1$ibLogin.x 35
ctl00$ContentPlaceHolder1$websiteLogin1$ibLogin.y 26
这个网站登录的表单,我猜需要你先访问一次这个页,先取得这些内容
{
System.Net.HttpWebRequest request;
System.Net.HttpWebResponse response;
System.IO.Stream stream;
System.IO.StreamReader reader;
byte[] body;
int i;
string content; body = System.Text.Encoding.UTF8.GetBytes("ctl00$ContentPlaceHolder1$websiteLogin1$tbUsername=asdf&ctl00$ContentPlaceHolder1$websiteLogin1$tbPassword=asdf"); request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("http://www.clicksaya.com/website/default.aspx"); request.CookieContainer = new System.Net.CookieContainer(); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded; charset=utf-8"; request.Referer = "http://www.clicksaya.com/website/default.aspx"; request.ContentLength = body.Length; using(stream = request.GetRequestStream())
{
stream.Write(body, 0, body.Length);
stream.Flush();
} response = null; try
{
response = (System.Net.HttpWebResponse)request.GetResponse();
for (i = 0; i < response.Headers.Count; ++i)
{
System.Console.WriteLine(string.Concat(response.Headers.GetKey(i), ": ", response.Headers.Get(i)));
}
stream = response.GetResponseStream();
reader = new System.IO.StreamReader(stream, System.Text.Encoding.UTF8);
content = reader.ReadToEnd();
reader.Close();
System.Console.WriteLine(content);
}
finally
{
if(null != response)
response.Close();
} System.Console.ReadLine();
}
{
response = (System.Net.HttpWebResponse)request.GetResponse();
response.Cookies = request.CookieContainer.GetCookies(new Uri(loginUrl));
for (i = 0; i < response.Headers.Count; ++i)
{
if (aa == "")
{
aa = string.Concat(response.Headers.GetKey(i), ": ", response.Headers.Get(i));
}
else
{
aa += string.Concat(response.Headers.GetKey(i), ": ", response.Headers.Get(i));
}
}
stream = response.GetResponseStream();
reader = new System.IO.StreamReader(stream, System.Text.Encoding.UTF8);
content = reader.ReadToEnd();
reader.Close();
lblget.Text = response.Cookies.Count.ToString();我加了红色的那一段,为什么获取COOKIE还是0呢?
那么。。
request.CookieContainer = new System.Net.CookieContainer();只要把这行代码改成指定的CookieContainer 就可以了
然后在得到Response后,把响应的Cookie加到前面指定的CookieContainer 里就可以了
response.Cookies = request.CookieContainer.GetCookies(request.RequestUri);
cc.Add(response.Cookies);就可以了是吗?
cc.Add(response.Cookies);
之后request.Cookies.Count 数量还是0
System.Net.HttpWebRequest request;
System.Net.HttpWebResponse response;
System.IO.Stream stream;
byte[] body; System.Net.CookieContainer cookies; cookies = new System.Net.CookieContainer(); body = System.Text.Encoding.UTF8.GetBytes("ctl00$ContentPlaceHolder1$websiteLogin1$tbUsername=asdf&ctl00$ContentPlaceHolder1$websiteLogin1$tbPassword=asdf"); request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("http://www.clicksaya.com/website/default.aspx"); request.CookieContainer = cookies; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded; charset=utf-8"; request.Referer = "http://www.clicksaya.com/website/default.aspx"; request.ContentLength = body.Length; using(stream = request.GetRequestStream())
{
stream.Write(body, 0, body.Length);
stream.Flush();
} response = null; try
{
response = (System.Net.HttpWebResponse)request.GetResponse(); cookies.Add(response.Cookies);
}
finally
{
if(null != response)
response.Close();
} foreach (System.Net.Cookie c in cookies.GetCookies(new Uri("http://www.clicksaya.com/website/default.aspx")))
{
System.Console.WriteLine(string.Concat(c.Name, ": ", c.Value));
} System.Console.ReadLine();