我使用的是 WebRequest
来读取一个HTML网站。服务器似乎在重定向我的请求。
我的代码类似于下面的内容。
String URI = "http://www.foo.com/bar/index.html"
WebRequest req = WebRequest.Create(URI);
WebResponse resp = req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
String returnedContent = sr.ReadToEnd();
当我检查内容的时候 returnedContent
它包含了来自重定向的内容,比如 "http:/www.foo.comFOO_BARindex.html"。我确信我请求的URL是存在的,因为它是收到的响应的一部分(作为IFrame)。
有什么方法可以防止 WebResponse
以被重定向并获得请求的url的内容?
更新
设置 req.AllowAutoRedirect = false
导致 302 Found
状态代码,但不传递真实的内容。
更多细节:我要求的网址是 http://www.foo.com/bar/index.html
我收到的内容位于 http://www.foo.com/FOO_BAR/index.html
响应看起来类似于这样。
<body>
<div>
<iframe src="/foo/index.html"></iframe>
</div>
</body>
你可以使用 HttpWebRequest
’s AllowAutoRedirect
财产:
…
var req = (HttpWebRequest)WebRequest.Create(URI);
req.AllowAutoRedirect = false;
…
我知道这是一个相当老的帖子,但我想分享我在我的特殊情况下发现的东西......。
我试图访问一个网站,看看是否有特定的内容。我发现它一直从我请求的网站重定向到一个本地版本的网站。我注意到一些负责重定向的cookies。如果有人遇到同样的问题,有可能是有一个cookie或者其他的请求头,你可以用它来防止重定向离开你的目标网站。
在我的例子中,我所要做的就是这样的事情。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
//whatever other headers you need...
request.Headers.Add(HttpRequestHeader.Cookie, "ipRedirectOverride=true");
请注意,这只是一个例子, 你的cookie名称的值可能会有所不同。