可以';t通过HttpWebRequest获取HTML代码

本文关键字:HttpWebRequest 获取 HTML 代码 通过 可以 | 更新日期: 2023-09-27 17:58:47

我正在尝试解析页面的HTML代码http://odds.bestbetting.com/horse-racing/today以便具有种族列表等。问题是我无法检索页面的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协议到其他不同协议的重定向。

我读过这个问题,但似乎没有同样的问题。我也试过用fiddler嗅探流量,但看不到任何重定向或类似的东西。我刚刚提取了这两个可能的重定向:odds.bestbetting.com/hors-racing/2011-06/10/byCourse和odds.bestbetting.com/horse-racing/2011-06/byTime,但查询它们会产生与上述相同的结果。

这不是我第一次做这样的事,但我真的很失落。有什么帮助吗?

谢谢!

可以';t通过HttpWebRequest获取HTML代码

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

经过多次搜索,我发现一个人在同一个网站上和我有同样的问题。尽管他的代码不同,但重要的是他手动将请求的UserAgent属性设置为浏览器的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"; }
    }

非常感谢你的帮助。

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

其中之一是来自服务器的重定向指向FTP站点或类似的站点。

也可能是服务器在请求中需要一些标头,而您未能提供这些标头。

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