WebRequest - 防止重定向。

问题描述 投票:1回答:2

我使用的是 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>
c# redirect httpwebrequest httpwebresponse http-status-code-302
2个回答
9
投票

你可以使用 HttpWebRequest’s AllowAutoRedirect 财产:

…
var req = (HttpWebRequest)WebRequest.Create(URI);
req.AllowAutoRedirect = false;
…

0
投票

我知道这是一个相当老的帖子,但我想分享我在我的特殊情况下发现的东西......。

我试图访问一个网站,看看是否有特定的内容。我发现它一直从我请求的网站重定向到一个本地版本的网站。我注意到一些负责重定向的cookies。如果有人遇到同样的问题,有可能是有一个cookie或者其他的请求头,你可以用它来防止重定向离开你的目标网站。

在我的例子中,我所要做的就是这样的事情。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
//whatever other headers you need...
request.Headers.Add(HttpRequestHeader.Cookie, "ipRedirectOverride=true");

请注意,这只是一个例子, 你的cookie名称的值可能会有所不同。

© www.soinside.com 2019 - 2024. All rights reserved.