无法通过HttpWebRequest获取HTML代码

时间:2011-06-10 10:49:42

标签: c#

我正在尝试解析http://odds.bestbetting.com/horse-racing/today页面的HTML代码,以便获得比赛列表等。 问题是我无法检索页面的HTML代码。这是函数的C#代码:

    public static string Http(string url) {          
            Uri myUri = new Uri(url);
            // Create a 'HttpWebRequest' object for the specified url. 
            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri);
            myHttpWebRequest.AllowAutoRedirect = true;
            // Send the request and wait for response.
            HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
            var stream = myHttpWebResponse.GetResponseStream();
            var reader = new StreamReader(stream);
            var html = reader.ReadToEnd();
            // Release resources of response object.
            myHttpWebResponse.Close();

            return html;
    }

当我执行调用该函数的程序时,它会在

上抛出异常
  

HttpWebResponse myHttpWebResponse =   (HttpWebResponse)myHttpWebRequest.GetResponse();

是:

  

无法处理从HTTP / HTTPS协议到其他不同协议的重定向。

我已阅读this question但我似乎没有同样的问题。 我也尝试用狡猾的东西来嗅探流量,但看不到它重定向的地方或类似的东西。我刚刚提取了这两种可能的重定向:odds.bestbetting.com/horse-racing/2011-06-10/byCourse  和odds.bestbetting.com/horse-racing/2011-06-10/byTime,但查询它们会产生与上面相同的结果。

这不是我第一次这样做,但我真的迷失了这个。有什么帮助吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

我终于找到了解决方案......它实际上是标题的问题,特别是用户代理问题。

我经过多次搜索后找到了一个与我在同一网站上遇到同样问题的人。虽然他的代码不同,但重要的是他将请求的UserAgent属性手动设置为浏览器的属性。我想我以前做过这件事,但我可能做得很糟糕......抱歉。

任何人感兴趣的最终代码是:

    public static string Http(string url) {
        if (url.Length > 0)
        {
            Uri myUri = new Uri(url);
            // Create a 'HttpWebRequest' object for the specified url. 
            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri);
            // Set the user agent as if we were a web browser
            myHttpWebRequest.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4";

            HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
            var stream = myHttpWebResponse.GetResponseStream();
            var reader = new StreamReader(stream);
            var html = reader.ReadToEnd();
            // Release resources of response object.
            myHttpWebResponse.Close();

            return html;
        }
        else { return "NO URL"; }
    }

非常感谢您的帮助。

答案 1 :(得分:1)

您的问题可能有十几种可能的原因。

其中一个是服务器的重定向指向FTP站点,或类似的东西。

也可能是服务器需要您未能提供的请求中的某些标头。

检查浏览器将发送到网站的内容并尝试复制。