C# 模拟post登陆后,关键cookie发送不出去,求帮助

q900907 2013-10-16 10:47:56
想做一个登陆小米网站的程序,在使用post模拟登陆的时候,能够获取到登陆后的cookie,cookieContainer里面有3个域名。(.xiaomi.com)(account.xiaomi.com)(.account.xiaomi.com) 在.account.xiaomi.com中存在着关键的cookie,pwdToken和passToken都有存在着。但是使用这个cookieContainer,然后httpWebRequest的时候,用get方法获取https://account.xiaomi.com/pass/userInfo?userId=73896043 的时候,我用fiddler发现他只发送了account.xiaomi.com域名中的cookie,而没有发送.account.xiaomi.com中的cookie。导致进页面被认为没登陆,一直返回登陆页面。第一次做winform的程序,被这个问题困扰了好多天了,一直没能解决。
使用ie登陆的话,用httpwatch能看到他发送了.account.xiaomi.com中的cookie,为什么使用程序get的时候他就不发送.account.xiaomi.com中的cookie了。甚为纠结。。。
希望各位大大指点迷津。。。让我不要再纠结了。。。

 
private HttpWebResponse loginResponse;
private StreamReader loginRespReader;

private CookieContainer m_Cookie = new CookieContainer();
private void button1_Click(object sender, EventArgs e)
{
this.xiaomiLogin();
string str=this.loginRespReader.ReadToEnd();

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://account.xiaomi.com/pass/userInfo?userId=174314059");
req.CookieContainer = new CookieContainer();
req.CookieContainer = m_Cookie;
req.Method = "GET";
//req.ContentType = "application/x-www-form-urlencoded";
loginResponse = (HttpWebResponse)req.GetResponse();
loginRespReader = new StreamReader(loginResponse.GetResponseStream());
textBox1.Text = loginRespReader.ReadToEnd();
}

private void xiaomiLogin()
{

string requestUriString = "https://account.xiaomi.com/pass/serviceLoginAuth2";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUriString);
request.CookieContainer = new CookieContainer();
request.CookieContainer = m_Cookie;
request.Method = "POST";
request.AllowAutoRedirect = true;
request.ContentType = "application/x-www-form-urlencoded";
string s = this.quoteParas(paras);
byte[] bytes = Encoding.UTF8.GetBytes("passToken=&user=13763114744&pwd=xiaomi123&callback=https%3A%2F%2Faccount.xiaomi.com&sid=passport&qs=%253Fsid%253Dpassport&hidden=&_sign=KKkRvCpZoDC%2BgLdeyOsdMhwV0Xg%3D");
request.ContentLength = bytes.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
this.loginResponse = (HttpWebResponse)request.GetResponse();
m_Cookie = request.CookieContainer;

this.loginRespReader = new StreamReader(this.loginResponse.GetResponseStream());

}
...全文
261 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-10-17
  • 打赏
  • 举报
回复
引用 4 楼 fangxinggood 的回复:
[quote=引用 2 楼 caozhy 的回复:] [quote=引用 1 楼 fangxinggood 的回复:] 这个应该是.net 4.0前 domain path 的bug。以前我在CSDN回答过。 我建议你从 Response 里直接从 ResponseHeader 里取 Set-Cookie 然后再设置到下一个Request Header 里。
强,连这种BUG你都知道。[/quote] 嗯,血泪史[/quote] 你这么一说我觉得我也遇到过,但是我没有怀疑是bug,后来怎么一搞就绕过去了。好像是手工附加httpHeader上吧。
机器人 2013-10-17
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
[quote=引用 1 楼 fangxinggood 的回复:] 这个应该是.net 4.0前 domain path 的bug。以前我在CSDN回答过。 我建议你从 Response 里直接从 ResponseHeader 里取 Set-Cookie 然后再设置到下一个Request Header 里。
强,连这种BUG你都知道。[/quote] 嗯,血泪史
机器人 2013-10-17
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/370003049 http://s.yanghao.org/program/viewdetail.php?i=120086 我以前回答的帖子。因为 domain 和 path 不一致会被舍弃。 你可以用 Response.Headers["Set-Cookie"] 自己取,去掉domain,path 自己设到 Request.Headers["Cookie"] 里。
threenewbee 2013-10-17
  • 打赏
  • 举报
回复
引用 1 楼 fangxinggood 的回复:
这个应该是.net 4.0前 domain path 的bug。以前我在CSDN回答过。 我建议你从 Response 里直接从 ResponseHeader 里取 Set-Cookie 然后再设置到下一个Request Header 里。
强,连这种BUG你都知道。
机器人 2013-10-17
  • 打赏
  • 举报
回复
这个应该是.net 4.0前 domain path 的bug。以前我在CSDN回答过。 我建议你从 Response 里直接从 ResponseHeader 里取 Set-Cookie 然后再设置到下一个Request Header 里。
q900907 2013-10-17
  • 打赏
  • 举报
回复
引用 1 楼 fangxinggood 的回复:
这个应该是.net 4.0前 domain path 的bug。以前我在CSDN回答过。 我建议你从 Response 里直接从 ResponseHeader 里取 Set-Cookie 然后再设置到下一个Request Header 里。
下了个vs2012,果断可以用了。。。同样的代码。。。蛋疼死了。结贴给分了。
机器人 2013-10-17
  • 打赏
  • 举报
回复
引用 6 楼 q900907 的回复:
[quote=引用 4 楼 fangxinggood 的回复:] [quote=引用 2 楼 caozhy 的回复:] [quote=引用 1 楼 fangxinggood 的回复:] 这个应该是.net 4.0前 domain path 的bug。以前我在CSDN回答过。 我建议你从 Response 里直接从 ResponseHeader 里取 Set-Cookie 然后再设置到下一个Request Header 里。
强,连这种BUG你都知道。[/quote] 嗯,血泪史[/quote] ~~~好吧。。。看来我也血泪史了。。。我用的是vs2008...难道要去升级一个。。。[/quote] 看来你也没好好看我的回答,我是说如果.net 4.0以下就需要手动修改Set-Cookie可以绕过这个问题。
q900907 2013-10-17
  • 打赏
  • 举报
回复
引用 4 楼 fangxinggood 的回复:
[quote=引用 2 楼 caozhy 的回复:] [quote=引用 1 楼 fangxinggood 的回复:] 这个应该是.net 4.0前 domain path 的bug。以前我在CSDN回答过。 我建议你从 Response 里直接从 ResponseHeader 里取 Set-Cookie 然后再设置到下一个Request Header 里。
强,连这种BUG你都知道。[/quote] 嗯,血泪史[/quote] ~~~好吧。。。看来我也血泪史了。。。我用的是vs2008...难道要去升级一个。。。

110,536

社区成员

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

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

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