http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

楼主: 2949497060

[其他] timeout问题

[复制链接]
发表于 2014-12-31 10:48:03 | 显示全部楼层
2949497060 发表于 2014-12-31 10:33
好的,我试过了,确实没有在3秒的时候返回,目前是在3秒后才返回StatusCode=200,代码:
            St ...

  DateTime st = DateTime.Now;
            StringBuilder sbHtml = new StringBuilder("");
            HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create("http://yzgsj.gov.cn/baweb/show/sj/JggsServlet");
            HttpWebResponse httpResp = null;
            try
            {
                httpReq.AllowAutoRedirect = true;
                httpReq.Timeout = 1000;
                httpReq.Method = "POST";
                httpReq.KeepAlive = true;
                httpReq.ContentType = "application/x-www-form-urlencoded";
                CookieContainer myCookieContainer = new CookieContainer();
                httpReq.CookieContainer = myCookieContainer;
                byte[] bytesData1 = System.Text.Encoding.GetEncoding("utf-8").GetBytes("pageNo=1&pageSize=20");
                httpReq.ContentLength = bytesData1.Length;
                Stream postStream1 = httpReq.GetRequestStream();
                postStream1.Write(bytesData1, 0, bytesData1.Length);
                httpResp = (HttpWebResponse)httpReq.GetResponse();

                MessageBox.Show("耗时:" + (DateTime.Now - st).TotalSeconds + "秒,反馈状态:" + httpResp.StatusDescription);

                StreamReader reader = new StreamReader(httpResp.GetResponseStream(), Encoding.GetEncoding("utf-8"));
                sbHtml.Append(reader.ReadToEnd());
                string responseHeader = httpResp.Headers.ToString();
                reader.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("耗时:" + (DateTime.Now - st).TotalSeconds + "秒,反馈状态:" +ex.Message);
            }



timeout设置后,必然是在设定的时间后有状态提示。你没处理好而已。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
回复

使用道具 举报

 楼主| 发表于 2014-12-31 10:50:29 | 显示全部楼层
本帖最后由 2949497060 于 2014-12-31 10:51 编辑
水手 发表于 2014-12-31 10:48
DateTime st = DateTime.Now;
            StringBuilder sbHtml = new StringBuilder("");
         ...

请问水手兄,试过了是几秒没有?对了,您设置的timeout是1秒,这个我也试过了,可以返回,但是为什么设置3秒的时候就不返回呢?
回复

使用道具 举报

发表于 2014-12-31 10:54:54 | 显示全部楼层
2949497060 发表于 2014-12-31 10:50
请问水手兄,试过了是几秒没有?对了,您设置的timeout是1秒,这个我也试过了,可以返回,但是为什么设置 ...

  catch (WebException ex)
            {
                if (ex.Status == WebExceptionStatus.Timeout)
                    MessageBox.Show("耗时:" + (DateTime.Now - st).TotalSeconds + "秒,反馈状态:" + ex.Message);
            }

设置超时时长,这个就是运行本次通讯等待响应的时长。在这个时长内有响应,则接受处理,无响应,就会标记为超时状态。跟多久时长没关系。还是代码的问题。
回复

使用道具 举报

 楼主| 发表于 2014-12-31 10:57:17 | 显示全部楼层
水手 发表于 2014-12-31 10:54
catch (WebException ex)
            {
                if (ex.Status == WebExceptionStatus.Time ...

这个道理我懂的,但是目前我设置为3秒的结果就是没有符合这个原理,连WebException都没有在3秒的时候捕获到,所以疑惑啊
回复

使用道具 举报

 楼主| 发表于 2014-12-31 11:00:57 | 显示全部楼层
2949497060 发表于 2014-12-31 10:57
这个道理我懂的,但是目前我设置为3秒的结果就是没有符合这个原理,连WebException都没有在3秒的时候捕获 ...

目前设置timeout为1秒或者2秒的话,可以在1秒或者2秒的时候就能马上捕获到“超时”,但是设置3秒的话,却在5、6秒的时候返回200
回复

使用道具 举报

发表于 2014-12-31 11:02:14 | 显示全部楼层
2949497060 发表于 2014-12-31 11:00
目前设置timeout为1秒或者2秒的话,可以在1秒或者2秒的时候就能马上捕获到“超时”,但是设置3秒的话,却 ...

返回200说明通讯成功了。在设定的超时时长内服务器有反馈信息。
回复

使用道具 举报

 楼主| 发表于 2014-12-31 11:02:32 | 显示全部楼层
水手 发表于 2014-12-31 10:54
catch (WebException ex)
            {
                if (ex.Status == WebExceptionStatus.Time ...

目前设置timeout为1秒或者2秒的话,可以在1秒或者2秒的时候就能马上捕获到“超时”,但是设置3秒的话,却在5、6秒的时候返回200,这是我不能理解的地方
回复

使用道具 举报

 楼主| 发表于 2014-12-31 11:10:23 | 显示全部楼层
水手 发表于 2014-12-31 11:02
返回200说明通讯成功了。在设定的超时时长内服务器有反馈信息。

它为什么没在我设定的3秒内返回200,而在5、6秒的时候才返回呢?
回复

使用道具 举报

 楼主| 发表于 2014-12-31 11:12:35 | 显示全部楼层
水手 发表于 2014-12-31 11:02
返回200说明通讯成功了。在设定的超时时长内服务器有反馈信息。

按道理,要么在3秒的时候返回200,要么返回WebException超时,但是目前这2样都没有在3秒的时候实现呢
回复

使用道具 举报

 楼主| 发表于 2014-12-31 11:33:09 | 显示全部楼层
水手 发表于 2014-12-31 11:02
返回200说明通讯成功了。在设定的超时时长内服务器有反馈信息。

哦,您说的意思是不是:在3秒内服务器已经返回了200,但是因为网络等其它原因导致延迟了几秒我这边才收到响应?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-24 09:00

© 2014-2021

快速回复 返回顶部 返回列表