从网站下载数据时遇到问题

Trouble with downloading data from web site

基本上我没有下载网页的经验,我试图获得这个包含每日股票交易价格的页面,但运气不好。我不确定是我在这里做错了什么,还是网络服务器不允许这种请求。网站适用于 chrome 或 IE。

               using (WebClient client = new WebClient())
           {

               byte[] response = client.DownloadData("http://limun.hr/main.aspx?id=18");
               string result = System.Text.Encoding.UTF8.GetString(response);
           }

如有任何帮助,我们将不胜感激。

编辑:我忘了包括错误之处。返回的字符串只包含一个字符 - @.

一些网站会查看 HTTP headers 中的 UserAgent 字符串,以查看调用者是否是实际的 Web 浏览器。如果您使用 HttpWebRequest class,您可以更好地控制调用,并且可以欺骗 UserAgent 字符串来模拟真实的 Web 浏览器。尝试如下操作使其工作:

HttpWebRequest request = WebRequest.Create("http://limun.hr/main.aspx?id=18") as HttpWebRequest;
request.UserAgent = "Mozilla /5.0 (Compatible MSIE 9.0;Windows NT 6.1;WOW64; Trident/5.0)";
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(););
string content = reader.ReadToEnd();
reader.Close();
response.Close();
Console.WriteLine(content);

问题确实是 HTTP headers 中的 UserAgent 字符串是错误的,但是您可以使用 WebClient class 在 headers 中添加该字符串,并让您的代码更简单:

        using (WebClient client = new WebClient())
        {
            client.Headers.Add("user-agent", "Mozilla /5.0 (Compatible MSIE 9.0;Windows NT 6.1;WOW64; Trident/5.0)");
            string res = client.DownloadString("http://limun.hr/main.aspx?id=18");
            Console.WriteLine(res);
        }

注意WebClient也有一个DownloadStringTaskAsync方法,根据您的需要,您可能会发现它很有用。