麻烦使用HttpWebRequest(C#)

时间:2010-02-02 18:41:07

标签: c#

我正在尝试编写一个应用程序,从Google财经获取股票报价,并在C#中绘制图表。我的程序使用HttpWebRequest类来请求包含股票报价的网页的源代码,大约每30秒。获得源代码后,我会提取引号并绘制图形。

我的问题是当程序每隔30秒请求一次,大约50%的时间我调用“objWebReq.GetResponse()”,我得到超时异常!我检查了我的互联网连接,我确信在超时异常发生时我已连接。是否有一些我没有正确做的事,这会导致谷歌偶尔拒绝我的请求?以下是我的程序中发出源代码请求的部分。

        //Create and configure object for request
        HttpWebRequest objWebReq = (HttpWebRequest)WebRequest.Create(url); //Valid URL
        objWebReq.Timeout = MSWAIT; //Set to 10 seconds
        objWebReq.Method = "GET";
        objWebReq.ContentType = "text/html";
        objWebReq.KeepAlive = false;
        objWebReq.Referer = "http://www.google.com/finance";
        objWebReq.UserAgent =
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115  
             Firefox/3.6";


        StreamReader objStream = null;


        //Create Object for the response.
        try
        {
            HttpWebResponse objWebResp = (HttpWebResponse)objWebReq.GetResponse();
            objStream = new StreamReader(objWebResp.GetResponseStream(),    
                                         System.Text.Encoding.ASCII);
        }
        catch
        {
         //Do Nothing
        }

        return objStream;
    }

1 个答案:

答案 0 :(得分:1)

您没有丢弃Web响应,这会在连接池等待连接时导致超时。我建议您在方法中阅读完整的响应并将其作为字符串返回,这样您就可以关闭连接:

using (HttpWebResponse response = (HttpWebResponse)objWebReq.GetResponse())
{
    // Are you sure it's *really* ASCII, rather than (say) UTF-8?
    using (TextReader reader = new StreamReader(response.GetResponseStream(),
                                                Encoding.ASCII))
    {
        return reader.ReadToEnd();
    }
}