我正在尝试编写一个应用程序,从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;
}
答案 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();
}
}