Web请求超时处理?
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Timeout = 20000; using (WebResponse response = request.GetResponse()) using (var stream = response.GetResponseStream()) using (var reader = new StreamReader(stream)) { var result = reader.ReadToEnd(); // Do something with result }
在上面的例子中我定义了一个超时,如果碰巧超时,我怎么知道,结果是空的?
我收到任何响应类型吗?
我怎样才能确保我超时?
GetResponse()
会抛出WebException
。 测试确切地发生了什么很简单 – 将超时设置为1ms并尝试点击需要一段时间才能返回的任何内容。
事实上, 文档明确说明了这一点:
如果超时期限在可以返回资源之前到期,则抛出WebException。
您的HttpWebRequest.GetResponse调用将在以下情况下抛出WebException ;
Abort was previously called. -or- The time-out period for the request expired. -or- An error occurred while processing the request.
抓住这个例外。
我曾经只是拉出我的网线来测试这种东西,虽然你可以更优雅并使用代理工具并阻止该特定请求。
您可能应该使用HTTPWebResponse 。 它有一个状态代码,可以告诉您该信息等。 HTTPWebResponse是WebResponse的后代。