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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 4700|回复: 3

[反馈建议] 一些小建议

[复制链接]
发表于 2014-3-30 16:14:33 | 显示全部楼层 |阅读模式
本帖最后由 registfailed 于 2014-3-30 16:19 编辑

今天搜到这个HttpHelper类,做的很不错。苏飞的共享精神值得学习。
仔细阅读了源代码,以下是一些小小的建议:
1. 开源非常好,不过建议加一个软件许可,这样别人要应用到自己的商业应用中,就比较放心了。
对于此类库目前的情况,Apache许可比较适用。
[Copy from other page]
Apache也是一个很受欢迎的开源协议,它跟BSD一样有很高的自由度,同样是可以任意使用协议授权的代码,但是要尊重原作者的著作权,可以不公开修改的代码,但要声明代码的来源。而且,它还可以在发行的时候选择其他的协议。
2. 对代码本身,类HttpHelper里,GetHtml,SetRequest,SetCer,SetCerList,SetCookie,SetPostData,SetProxy等方法,都有一个共同的参数:HttpItem item,可以考虑将这个参数去掉,把这个 HttpItem 变成一个类的私有成员,并修改构造函数,将HttpItem从构造函数传入,这样能更好的体现HttpItem类与HttpHelper的关系。
3. 对于类HttpItem,在URL上有一个注释:“请求URL必须填写”。
对于这个情况,建议从代码上来限制,强制用户填写URL。
比如可以做成一个构造函数的参数来传入,这样用户就必须填写URL才能构造出 HttpItem,在使用上更容易一次性将代码写正确。

修改后调用的代码大约是这样,个人认为看起来比较直观和简洁:
[C#] 纯文本查看 复制代码
HttpItem item = new HttpItem("http://www.sufeinet.com/thread-7297-1-1.html");
HttpHelper helper = new HttpHelper(item);
HttpResult res = helper.GetHtml();


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-3-31 08:27:17 | 显示全部楼层
首先感谢你的建议
1.协议的事情稍后再加,现在代码还不太完善。大家随便用,随便改。不限制,呵呵
2.HttpItem 去掉目前是没有问题的,但应该不能从构造函数传入。因为很多情况下HttpHelper 是一个公共的变量,而HttpItem是一个可随时New的类。而且HttpHelper 类里只有一个Public的方法,如果非要改的话应该是从GetHtml传入。这样一时上万的老用户可以正常升级,二是方便扩展,和复用。
3.这个是可以限制而且不止这一种。但是你的这个建议我目前还不能采用,你有没有想过,有几个人会不传入这个参数,有几个人会忘记。如果你要用这个类,Url都不传入的话,我只能说这个人真没有必要用我的类了。这就相当于打开了浏览器不知道输入Url一样。
另外HttpItem item = new HttpItem("http://www.sufeinet.com/thread-7297-1-1.html"); 这样写是不就限制了用户只能在2.0语法以下使用了,
想使用2.0以上写法可能就困难了吧
比如
[C#] 纯文本查看 复制代码
HttpItem item = new HttpItem()
           {
               URL = "http://www.sufeinet.com",//URL这里都是测试     必需项
               Method = "get",//URL     可选项 默认为Get
           };

而只能这样
[C#] 纯文本查看 复制代码
HttpItem item = new HttpItem();
item.URL = "http://www.sufeinet.com";//URL这里都是测试 必需项
item.Method = "get";//URL 可选项 默认为Get

这样更容易忘记参数,而且很难知道那个参数应该写,那些不应该写
不能光看眼前的或者是个人需求。

其实我连Http的格式都没有限制,我是尽可能的原始化。这样才能满足大部分人的需求。
因为你多加一个验证就会损失性能,破坏原始化的东西,如果真需要可以自己验证之后再传入(这样才可以让用户自由发挥)。
而不是限制死用户。


 楼主| 发表于 2014-3-31 11:41:41 | 显示全部楼层
多谢你的回复,我仔细想了一下这个问题:
因为很多情况下HttpHelper 是一个公共的变量,而HttpItem是一个可随时New的类。

如果是这个应用场景,那应该把  GetHtml 做成一个静态方法,直接使用
HttpHelper.GetHtml(item);就完成了所有功能,不需要让使用者持有一个HttpHelper的公共变量。

对于限制URL,实际上这样的代码是正常运行的:
[C#] 纯文本查看 复制代码
            HttpItem item = new HttpItem("http://www.sufeinet.com/thread-7297-1-1.html") 
            {
                Method = "GET"
            };
发表于 2014-4-1 16:58:58 | 显示全部楼层
感觉HttpHelper各种的使用方法资料很杂,好像这站到处都有一样
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-11-14 14:25

© 2014-2021

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