首页 新闻 赞助 找找看

关于httpwebrequest无法获取cookie的问题,有代码,可直接调试.

0
悬赏园豆:50 [已解决问题] 解决于 2011-03-07 18:37

代码可以直接贴到winfrom里断点执行,

直接到firebug里跟踪可以看到cookie

http://vip.fang.58.com/login.aspx

 


string postData="__VIEWSTATE=/wEPDwUKLTcxMDYwMzYwNGRkIr9b9tytd6ITkVMabkIG5x3FrHc=& amp;companyName=&loginSubmit=%E7%99%BB%E5%BD%95&loginname=& loginpwd=&loginSubmit=登录";

//我用get的方式获取不到,索性把账号密码都制空,让它报错,

string url="http://vip.fang.58.com/login.aspx";

HttpWebRequest request;
HttpWebResponse response
= null;
string msg = "";
byte[] b = null;
b
= Encoding.UTF8.GetBytes(postData);

request
= WebRequest.Create(url) as HttpWebRequest;
request.CookieContainer
= new CookieContainer();
request.Method
= "POST";
request.Timeout
= 30000;
request.AllowAutoRedirect
= true;
request.ContentType
= "text/html; charset=utf-8";
request.UserAgent
= "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 AlexaToolbar/alxf-2.0 Firefox/3.6.13";
request.Accept
= "text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8";
//request.Headers.Add("Accept-Language", "zh-CN");
//request.Headers.Add("Accept-Encoding", "gzip, deflate");
request.KeepAlive = false;

request.ContentLength
= b.Length;
using (Stream stream = request.GetRequestStream())
{
stream.Write(b,
0, b.Length);
}

try
{
using (response = request.GetResponse() as HttpWebResponse)
{//这里没有值;
string aaa = request.Headers.Get("Set-Cookie");
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
msg
= reader.ReadToEnd();
//这里是0;
if (response.Cookies.Count > 0)
{
cookie.Add(response.Cookies);
}
if (msg.Contains(str))
{
return true;
}
else
{
return false;
}
}
}
}
catch
{
return false;
}

卡蒙的主页 卡蒙 | 初学一级 | 园豆:135
提问于:2011-03-02 21:44
< >
分享
最佳答案
0

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

收获园豆:25
三聪 | 初学一级 |园豆:139 | 2011-03-02 22:05
没有上面这句,是不能正常识别为postback的
三聪 | 园豆:139 (初学一级) | 2011-03-02 22:17
都试过了,不行..
卡蒙 | 园豆:135 (初学一级) | 2011-03-02 22:17
你把postData填完整再试,别外
string aaa = request.Headers.Get("Set-Cookie");
应该是string aaa = response.Headers.Get("Set-Cookie");
三聪 | 园豆:139 (初学一级) | 2011-03-02 22:19
我本地都测试出来了
三聪 | 园豆:139 (初学一级) | 2011-03-02 22:20
cookie取出来了,但是在我获取一个报表的时候,显示

远程服务器返回错误: (500) 内部服务器错误。

我把firebug的参数都post的过去了...
卡蒙 | 园豆:135 (初学一级) | 2011-03-02 23:01
其他回答(3)
0

postData 里的用户名,密码都为空,提交后,服务器直接返回登录失败的页面,自然也就不会 set cookie 了。

收获园豆:15
ji yang | 园豆:220 (菜鸟二级) | 2011-03-02 21:56
服务器是有初始值的,无论提交东西与否,都会根据你的ip记录一些信息,比方说地区等.我用get的方式,也得不到初始的cookie
支持(0) 反对(0) 卡蒙 | 园豆:135 (初学一级) | 2011-03-02 22:14
0

可以用webbrowser试试啊,webbrowser可以自动记录Cookie的,并且与IE共享可以。

另外:可以吧request.KeepAlive = false;改成 request.KeepAlive = true;试试

收获园豆:10
qwe111 | 园豆:220 (菜鸟二级) | 2011-03-02 22:00
我主要是想下载里边一个报表,webbrowser模拟下载老出另存为的对话框,并且我没找到取消的方法.keepalive=true试过,不行
支持(0) 反对(0) 卡蒙 | 园豆:135 (初学一级) | 2011-03-02 22:15
0

想知道你最后是如何拿到所有的cookie的,我目前只拿的到set-cookie里边的..

qwdxasd12 | 园豆:205 (菜鸟二级) | 2012-02-07 18:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册