请考虑这种语言不可知。我真的很想知道下面会发生什么。代码在C#中。问题是,我正在尝试获取此URL:
来自代码的https://fr.wikipedia.org/wiki/Monast%C3%A8re_d%27Arkadi
。
无论我做什么,我都会得到超过" MaximumAutoRedirects"或"操作
超时"。
C#中的示例代码,虽然我在其他语言中看到类似的结果:
var url = "https://fr.wikipedia.org/wiki/Monast%C3%A8re_d%27Arkadi";
var request = (HttpWebRequest)WebRequest.Create(url);
try
{
request.CookieContainer = new CookieContainer();
request.MaximumAutomaticRedirections = Int32.MaxValue;
request.AllowAutoRedirect = true;
request.Method = "GET";
using (WebResponse response = request.GetResponse())
using (var stream = response.GetResponseStream())
{
var reader = new StreamReader(stream);
var res = reader.ReadToEnd();
}
}
catch (Exception ex)
{
}
我的问题:
答案 0 :(得分:2)
是否可以根据请求在无限循环中设置301?
是。 http服务器可以向您发送一个无限的方案。通常,浏览器将检测到无限重定向循环并停止重定向。服务器端的配置问题可以创建重定向循环。 HTTP客户端应该能够检测到并在经过一定量的重定向后停止(并且request.MaximumAutomaticRedirections = Int32.MaxValue
在这种情况下可能过大)
为什么会这样?好吧,错误。您可以在HTTP服务器配置中编写具有无限重定向的规则,HTTP服务器不是编译器,这在服务器端不会被检测到。
或者您可能需要管理很多不同的服务器,并且它们并非都能同时获得最后的配置。在维基百科案例中,可能是某人修复页面的重定向。说你有:
你将其修复为:
如果任何反向代理缓存在临时缓存中注册了A -> B
重定向,或者在所有数据库副本中都没有立即可用(因为维基在应用程序数据库中存储了大量规则),那么...您可以在客户端同时收到A->B
和B->A
个回复。
为什么会发生这种自动重定向?
因为你写道:
request.AllowAutoRedirect = true;
请注意,我不是C#专家,但似乎合法。
是否可以从代码/浏览器中检测到get?
不确定你要求的是什么。
修改强> 好的,所以你的问题是如何跟踪浏览器在进行简单GET 时产生的HTTP流量,以及如何跟踪代码中的跟踪信息。
在浏览器上,您有一些本机工具,例如开发工具中的网络选项卡,您可以在其中激活preserve log
按钮来跟踪重定向,但是对于简单的重定向,我认为您甚至不需要预先记录日志查看302回复,然后是其他请求。
如果要捕获计算机上的所有HTTP流量,可以始终使用wireshark,这不是很难。或者,您可以通过Fiddler等代理在您的应用程序或浏览器中强制执行所有HTTP流量。