2011-04-21 82 views
0

我的代码试图导航网址通过外部进程提供给它的,但最近我发现了一个bug在HttpWebRequest的重定向 在案件的网址为http://ask.bitauto.com/TreeAsk/index.aspxHttpWebRequest的重定向失败

,我发现这是什么网址获取浏览器导航成功当指定的HTTP Referer的,但净的WebRequest的失败(但不提供任何例外),即使.Refer分配,在启用失败与MaxRedirect AutoRedirects的情况下达到例外

根据MSDN

“如果AllowAutoRedirect属性为true,当请求被重定向到另一个站点时,Referer属性自动设置。“

这是否意味着在同一站点重定向的处理方式不同。请让我知道如果有人有任何想法如何解决这个问题。

由于提前

回答

1

我觉得这个问题的根源是中http://ask.bitauto.com/TreeAsk/index.aspx

按照你的链接(因此具有引荐计算器)导致这样的回答:

HTTP/1.1 302 Found 
Date: Thu, 21 Apr 2011 07:28:03 GMT 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
X-AspNet-Version: 2.0.50727 
Location: 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Content-Length: 117 

通知空Location头 - 从服务器的应答是重定向到什么都没有。

编辑:

这似乎是空的重定向页面,如果你有没有引用或non-ask.bitauto.com引用时,才会显示。将目标网址设置为引荐来源会产生200 OK答案。

编辑2:

空Location头行为不是根据RFC2616,并且它似乎是不同的web剂反应,因此在different way

我认为最适合您的解决方案是在您的请求中指定HTTPWebRequest.Referrer

+0

根据我对HTTP协议空白位置标题的理解,意味着你被重定向到同一页面,HTTPWebRequest也是如此,但是在这种情况下它并没有设置Referer Header,这种情况一次又一次地导致了来自服务器的相同响应, MaximumAutomaticRedirections。 – CodeWrite 2011-04-21 08:07:32

+0

我没有发现任何支持该重定向行为的源代码,编辑了这个答案来反映这一点。 – 2011-04-21 08:18:26

+0

我认为你是对的我正在使用HTTPWebRequest的AutoRedirect属性,导致问题。 我在使用Referer手动重定向,在达到MaximumAutomaticRedirections之后,行为使得HTTPWebRequest不可预知,程序崩溃。 现在遵循你的建议,我关闭了AutomaticRedirects及其正常工作。 感谢您的咨询! – CodeWrite 2011-04-21 08:37:31