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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 5206|回复: 3

[反馈建议] 惊!HttpHelperV1.8 竟然有这些错误!

[复制链接]
发表于 2017-6-8 22:05:12 | 显示全部楼层 |阅读模式
Sorry,原谅我是标题党,因为正常标题根本没人看
不过,下面还是有点干货的。

坐标 HttpHelperV1.8(.Net 4.0)

1.拼写错误
447行   
[C#] 纯文本查看 复制代码
#region public calss

应该改成
[C#] 纯文本查看 复制代码
#region public class


2.修改建议
大文件下载时,有不必要的性能损失
129行
[C#] 纯文本查看 复制代码
#region Html
            if (ResponseByte != null && ResponseByte.Length > 0)
            {
                //设置编码
                SetEncoding(item, result, ResponseByte);
                //得到返回的HTML
                result.Html = encoding.GetString(ResponseByte);
            }
            else
            {
                //没有返回任何Html代码
                result.Html = string.Empty;
            }
            #endregion


当我们用HttpHelper下载文件的时候,会把Item.ResultType设置成ResultType.Byte,
表示请求的是文件流,当加载完成后,我们会使用到result.ResultByte,并把它保存成本地文件。

一般在这种情况下,外界并不会使用到result.Html,但V1.8代码,HttpHelper
仍旧会使用result.Html = encoding.GetString(ResponseByte);
但其实这个Html已经没有太大的意义了,因为返回内容是文件流。
如果文件流很大,经测试,这条语句还是蛮消耗资源。

所以,我斗胆以为,在文件下载的时候(ResultType.Byte)
不需要再设置result.Html了,在大文件下载场景,会有可观的性能提升。

3.关于网络文件下载进度的改进建议
使用HttpHelper下载文件时候,无法获取下载进度。
我在HttpHelper里添加进度的事件反馈通知。
通知事件大概代码:
[C#] 纯文本查看 复制代码
        #region 下载进度事件
        public delegate void ProcessReportedEventHandler(Object sender, ProcessReportedEventArgs e);
        public event ProcessReportedEventHandler ProcessReported;       //声明事件 
        protected virtual void OnProcessReported(ProcessReportedEventArgs e)
        {
            if (ProcessReported != null)
            {       // 如果有对象注册
                ProcessReported(this, e);       // 调用所有注册对象的方法
            }
        }
        #endregion


重新写了GetByteWithResponse代替原来的GetByte
[C#] 纯文本查看 复制代码
/// <summary>
        /// 提取网页Byte
        /// </summary>
        /// <returns></returns>
        private byte[] GetByteWithResponse()
        {
            byte[] ResponseByte = null;
            MemoryStream _stream = new MemoryStream();

            //GZIIP处理
            if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))
            {
                //开始读取流并设置编码方式
                _stream = GetMemoryStream(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress));
            }
            else
            {
                //开始读取流并设置编码方式
                _stream = GetMemoryStream(response.GetResponseStream());
            }
            //获取Byte
            ResponseByte = _stream.ToArray();
            _stream.Close();
            return ResponseByte;
        }

        /// <summary>
        /// 手动控制获取流内容 
        /// </summary>
        /// <param name="streamResponse">流</param>
        private MemoryStream GetMemoryStream(Stream streamResponse)
        {
            MemoryStream _stream = new MemoryStream();
            
            long totalLength = streamResponse.Length;
            int Length = 25600;
            Byte[] buffer = new Byte[Length];
            int bytesRead = streamResponse.Read(buffer, 0, Length);
            while (bytesRead > 0)
            {
                OnProcessReported(new ProcessReportedEventArgs((int)(_stream.Length / totalLength) * 100));
                _stream.Write(buffer, 0, bytesRead);
                bytesRead = streamResponse.Read(buffer, 0, Length);
            }
            OnProcessReported(new ProcessReportedEventArgs(100));
            return _stream;
        }


4.关于文件下载功能的拓展
a) 多线程下载
b) 断点续传
上述拓展功能可能加在HttpHelper外部可能更合适
但是下载进度,这个功能,我觉得放在HttpHelper里面还是很有必要的,因为外面根本获取不到进度。



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2017-6-9 08:23:32 | 显示全部楼层
上面的建议接受,关于文件下载的已经在上一个帖子说明了,
另外Httphelper不会在下载方面做很多努力,仅仅是小微量下载即可。
其他的建议使用专门的下载类,毕竟方向不同
 楼主| 发表于 2017-6-9 09:13:04 | 显示全部楼层
很高兴建议被采纳
发表于 2017-6-30 19:42:32 | 显示全部楼层
强烈支持楼主ing……感谢楼主和飞哥。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-11-22 06:21

© 2014-2021

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