有人请帮助 - 一直在努力解决这个糟糕的问题!烦恼! POST返回302找到的对象在HttpWebRequest中移动错误
我在做什么 - 我有一个ASPX页面,我从中发起一个GET,然后POST一个HTTPS页面,以便登录到该页面。我花了相当多的时间比较我的GET和POST构建到使用fiddler(协议分析器)的浏览器GET/POST,并且我的请求没有问题。
然而,当我尝试通过浏览器登录,一切工作正常,并登录,当我跑我的网页,我可以看到正确的GET和POST,但我得到一个302找到“对象移动错误”
本来我认为这是一个cookie问题,但经过多次实验后,我很确定这与cookie无关。我在浏览器上禁用了Cookie和JavaScript,并且尝试了,并且页面也没有任何问题。然后我模拟确切的GET/POST。
这是我的情况:
- 我GET和浏览器得到的是完全相同的
- 从站点200 OK应答是一致,除了它具有略微不同的长度3个VIEWSTATE变量相同(为什么?为什么不同,即使GET相同?)
- 我的POST和浏览器POST完全相同除了3 Viewstate变量(我从GET正确填充它)
- 然而,浏览器登录,而我得到302找到/对象移动错误。
一对夫妇的其他东西 -
一)我复制从最近的浏览器POST自检响应,并取代了我的post数据使用这个浏览器POST和这让我正确的反应!这表明
- 我的头就好了
- 我的编码设置/环境等等都很好
- 这是在ViewState值,这只能是因为浏览器首先把它交给我腥(有没有腐败我的解析GET VIEWSTATE变量,并在后期使用它,它是完美的罚款)
更新我也曾尝试Web客户端只是为了检查 - 没有任何区别,同样的302 更新的对象主要移动指向一个错误页面,说'发生了严重的错误等等' - POST在服务器上导致错误,a nd良好的POST(浏览器)和我的POST之间的唯一区别是Viewstate变量。
所以 - 我做错了什么?为什么这个残酷的世界折磨着我?
(PS - 在浏览器序列中一个其他区别,不知道它是如何事项)
Browser:
CONNECT
GET
GET (for a favicon, which returns an error)
CONNECT
POST (success)
Me:
CONNECT
GET
POST (flaming failure, 302 - page moved)
,并为那些谁照顾,我的帖子标题施工规范
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.UserAgent = chromeUserAgent;
//myRequest.CookieContainer = cCookies;
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.Accept = chromeAccept;
myRequest.Referer = url;
myRequest.AllowAutoRedirect = false;
myRequest.Host = "thesitethatskillingme.com";
myRequest.Headers.Add("Origin", "https://thesitethatskillingme.com");
myRequest.Headers.Add("Accept-Encoding", chromeAcceptEncoding);
myRequest.Headers.Add("Accept-Language", chromeAcceptLanguage);
myRequest.Headers.Add("Accept-Charset", chromeAcceptCharset);
myRequest.Headers.Add("Cache-Control", "max-age=0");
myRequest.ServicePoint.Expect100Continue = false;
myRequest.Method = "POST";
myRequest.KeepAlive = true;
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bData = ascii.GetBytes(data);
myRequest.ContentLength = bData.Length;
using (Stream oStream = myRequest.GetRequestStream())
oStream.Write(bData, 0, bData.Length);
..然后阅读流等没有饼干。
你确定浏览器什么时候成功登录,它没有得到302响应吗?它只会自动关注重定向。当你得到302时,响应中的Location标题(它试图向你发送信息的地方是什么?) – superfell 2010-08-14 18:27:56
对于浏览器:在fiddler中,我看不到302响应 - 只是POST的直接HTTP/1.1 200 OK响应,但当我做POST时,我得到302。我会假设我会在消息级看到任何自动跟随在提琴手中,但我什么都看不到。它是GET,然后POST - 成功200 OK。它必须是一些微不足道的东西,只是无法弄清楚 - 为什么对我的完全相同的GET的反应与浏览器接收到的有些不同?我认为这是问题所在...... – Gerry 2010-08-14 19:04:34
是否应该有自动重定向?你是在做一个Response.Redirect,或者是一个Server.Transfer的地方? – Doobi 2010-08-14 22:09:53