同步HttpWebRequest等待重定向完成

时间:2014-08-16 10:26:37

标签: c# httpwebrequest

我使用HttpWebRequest从网页请求信息,但有时网站会重定向我,直到我到达正确的页面,这完全没问题,但是当我使用内容字符串下面的代码时(string content)应该包含结束页面内容(重定向后),实际上包含重定向页面"重定向"。

基本上我需要在获得响应之前等待所有重定向完成以下请求。我该怎么做?

HttpWebRequest http = HttpWebRequest.Create(loginUrl) as HttpWebRequest;
http.AllowAutoRedirect = true;
// Wait for redirections to be completed before getting response
....
using (var response = http.GetResponse() as HttpWebResponse)
{
    if (response.StatusCode == HttpStatusCode.OK)
    {
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            string content = reader.ReadToEnd();
            if (content.Length > 0)
            {
            }
        }
    }
}

修改

在检查重定向页面后,我可以告诉重定向是通过Javascript执行的,我将抛弃HttpWebRequest重定向逻辑。建议考虑到这一点,或者我应该尝试另一件事,也许是这些程序的另一个.Net包装器?

1 个答案:

答案 0 :(得分:1)

当您拥有"自动重定向" HttpWebRequest会查找重定向状态代码。启用。在这种情况下,重定向是通过javascript执行的,状态代码是200 OK,所以你需要额外的逻辑来解释这一点。

这里有几个选项,更简单的方法是解析响应HTML并找到脚本将重定向到的位置的URL。如果脚本使用来自cookie等的信息来构建URL,您可能需要解释该响应上的javascript以遵循重定向。