在使用.NET中的httpWebRequest时出现“尝试过多的自动重定向”错误信息。

19

我正尝试使用vb.net中的webrequest类请求页面,例如"http://www.google.com/?q=random"。由于我们在防火墙后面,所以我们必须对请求进行身份验证。我已经通过添加我的凭据来解决了身份验证部分的问题。

但是一旦身份验证成功,它似乎会进入一个重定向循环。

是否有任何想法、评论或建议可以解决这个问题?其他人有没有遇到过这个问题?

Dim loHttp As HttpWebRequest =  CType(WebRequest.Create(_url), HttpWebRequest)
loHttp.Timeout = 10000
loHttp.Method = "GET"
loHttp.KeepAlive = True
loHttp.AllowAutoRedirect = True
loHttp.PreAuthenticate = True
Dim _cred1 As NetworkCredential = ... //this is setup
//snip out this stuff
loHttp.Credentials = _cc
loWebResponse = loHttp.GetResponse()
4个回答

44

确保您已经设置了一个cookie容器。

CookieContainer cookieContainer = new CookieContainer();
loHttp.CookieContainer = cookieContainer;

你可能没有保存cookie并陷入了重定向循环。


1
这刚刚让我免去了数小时的痛苦和折磨!非常感谢!:D - Maritim

8
loHttp.AllowAutoRedirect = true

不要使用这个,你需要使用

loHttp.AllowAutoRedirect = False

为避免错误

"尝试了太多自动重定向"


这是不正确的。HttpWebRequest.AllowAutoRedirect 属性的 MSDN 文档 表示:“如果您希望请求自动遵循 HTTP 重定向标头到资源的新位置,请将 AllowAutoRedirect 设置为 true。要遵循的最大重定向次数由 MaximumAutomaticRedirections 属性设置。”上面的链接适用于 .NET 4.5,但文档从 2.0 开始就说同样的话。 - David
在某些情况下,如果您遇到该错误,您需要将其设置为“false”。 - fgalarraga
这似乎“有效”,因为它实际上并没有遵循自动重定向,而是停留在第一个页面。因此,取决于您想要发生什么,将确定此答案是否正确。它不会带您到浏览器将带您到的相同位置。 - Jim

2

我将Darryl提供的C#代码翻译成了VB,并在getResponse调用之前插入了它。

Dim cookieContainer As CookieContainer = New CookieContainer()
loHttp.CookieContainer = cookieContainer
loWebResponse = loHttp.GetResponse()

0
也许,你可以通过从响应中获取Location并使用适当的cookies来单独处理每个重定向。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接