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:07:35 | 显示全部楼层
水手 发表于 2014-12-31 10:05
你设置3秒,就表示你认为超过3秒没响应就要设置问超时状态。设置为3秒后,3秒内服务器没响应就会作为超时 ...

那用另一个线程强制close这个response能行吗?


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

使用道具 举报

发表于 2014-12-31 10:10:04 | 显示全部楼层
2949497060 发表于 2014-12-31 10:07
那用另一个线程强制close这个response能行吗?

为什么要强制关闭?设置超时时长(3秒)后,3秒后通讯就已经关闭了,通讯结果状态为超时。
回复

使用道具 举报

发表于 2014-12-31 10:11:13 | 显示全部楼层
2949497060 发表于 2014-12-31 10:07
那用另一个线程强制close这个response能行吗?

建议先了解下HttpWebRequest、HttpWebResponse
回复

使用道具 举报

 楼主| 发表于 2014-12-31 10:12:56 | 显示全部楼层
水手 发表于 2014-12-31 10:11
建议先了解下HttpWebRequest、HttpWebResponse

我目前的情况是,设置timeout为3秒,但是5、6秒的时候才返回一个值,stats为200和501的时候都有,都超过了3秒,所以我想的是只要3秒没返回值就结束掉进行下一次request
回复

使用道具 举报

 楼主| 发表于 2014-12-31 10:15:53 | 显示全部楼层
水手 发表于 2014-12-31 10:10
为什么要强制关闭?设置超时时长(3秒)后,3秒后通讯就已经关闭了,通讯结果状态为超时。

我的感觉就是现在太它到3秒的时候通讯还没有关闭,并没有在3秒返回给我状态“超时”,所以才有这样的问题
回复

使用道具 举报

发表于 2014-12-31 10:16:54 | 显示全部楼层
2949497060 发表于 2014-12-31 10:12
我目前的情况是,设置timeout为3秒,但是5、6秒的时候才返回一个值,stats为200和501的时候都有,都超过 ...

可以的。获取响应状态后(不了是否成功,都可以直接进行下一次访问)。获取到响应状态后,就表明当前通讯完了,可以进行下一次通信了。
回复

使用道具 举报

 楼主| 发表于 2014-12-31 10:21:04 | 显示全部楼层
水手 发表于 2014-12-31 10:16
可以的。获取响应状态后(不了是否成功,都可以直接进行下一次访问)。获取到响应状态后,就表明当前通讯完 ...

可能我说得还不够清楚,我的意思是,我不想等到5、6秒的时候才获取到响应状态,我想在3秒的时候就强制判定:1、如果3秒以内的时候有响应,当然就不用说了;2、如果达到3秒还没有响应,我就强制默认为是超时了,不管它在以后是返回200还是501还是404还是其它的,我都认为是超时,访问失败,然后我就马上进行下一次request,而不是等到5、6秒后才进行判断
回复

使用道具 举报

 楼主| 发表于 2014-12-31 10:22:30 | 显示全部楼层
水手 发表于 2014-12-31 10:16
可以的。获取响应状态后(不了是否成功,都可以直接进行下一次访问)。获取到响应状态后,就表明当前通讯完 ...

目前是在3秒的时候它还没有结束GetResponse(),所以没办法判断response.StatusCode,所以才问问能不能强制Close掉
回复

使用道具 举报

发表于 2014-12-31 10:23:56 | 显示全部楼层
2949497060 发表于 2014-12-31 10:22
目前是在3秒的时候它还没有结束GetResponse(),所以没办法判断response.StatusCode,所以才问问能不能强 ...

代码贴出来看看。设置有timeout的话,必然会在超过时长后作为超时反馈。
回复

使用道具 举报

 楼主| 发表于 2014-12-31 10:33:06 | 显示全部楼层
水手 发表于 2014-12-31 10:23
代码贴出来看看。设置有timeout的话,必然会在超过时长后作为超时反馈。

好的,我试过了,确实没有在3秒的时候返回,目前是在3秒后才返回StatusCode=200,代码:
            StringBuilder sbHtml = new StringBuilder("");
            HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create("http://yzgsj.gov.cn/baweb/show/sj/JggsServlet");
            HttpWebResponse httpResp = null;
            try
            {
                httpReq.AllowAutoRedirect = cbxAllowRedirect.Checked;
                httpReq.Timeout = 3000;
                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();
                StreamReader reader = new StreamReader(httpResp.GetResponseStream(), Encoding.GetEncoding("utf-8"));
                sbHtml.Append(reader.ReadToEnd());
                string responseHeader = httpResp.Headers.ToString();
                reader.Close();
                //txtPostedPageInfo.Text = responseHeader + "\r\n-------------\r\n" + sbHtml.ToString();
                //wbsrPostedPageInfo.DocumentText = sbHtml.ToString();
                return SbHtml.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                if (httpResp != null)
                {
                    httpResp.Close();
                    httpReq.Abort();
                }
            }
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 08:45

© 2014-2021

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