苏飞论坛

标题: 关于Httphelper类的建议调查 [打印本页]

作者: 站长苏飞    时间: 2013-4-9 15:21
标题: 关于Httphelper类的建议调查
      
       首先感谢大家一直以来对Httphelper类的支持,我将一如既往的进行修改,并持续更新。
如果你对本类有什么建议或者意见的话可以在此提出来,不管是使用,还是结构上的都可以提,如果你发现Bug可以在此直接回复提出,我将对提出有Bug的同志进行一定量的积分奖励哦!

Httphelper类源码下载:http://www.sufeinet.com/thread-3-1-1.html
Httphelper类在线生成器:http://www.sufeinet.com/thread-2174-1-1.html
Httphelper类原理:http://www.sufeinet.com/thread-6-1-1.html
Httphelper类教程:http://www.sufeinet.com/forum.ph ... action=view&ctid=23
Httphelper类例子:http://www.sufeinet.com/forum.ph ... action=view&ctid=22






作者: ro4ters    时间: 2013-4-9 15:32
  抢到一楼?
作者: ro4ters    时间: 2013-4-9 15:33
建议去掉编码后自动将返回页面转换成小写..之前写一个post的地方就因为返回大小写错误报错.
作者: ro4ters    时间: 2013-4-9 15:34
在判断返回值type的时候如果是字节数组没有直接return HttpResult.(也就是如果得到返回值是图片的时候.)
作者: 站长苏飞    时间: 2013-4-9 15:35
ro4ters 发表于 2013-4-9 15:33
建议去掉编码后自动将返回页面转换成小写..之前写一个post的地方就因为返回大小写错误报错.

IsToLower 这个参数就是用来设置大小写的
作者: ro4ters    时间: 2013-4-9 15:36
站长苏飞 发表于 2013-4-9 15:35
IsToLower 这个参数就是用来设置大小写的

嗯,我自己用的时候上面的问题已经修正.
作者: 站长苏飞    时间: 2013-4-9 15:42
ro4ters 发表于 2013-4-9 15:34
在判断返回值type的时候如果是字节数组没有直接return HttpResult.(也就是如果得到返回值是图片的时候.)

这句听的不太明白,你是说如果是图片没有返回Byte还是我代码中有问题???
作者: ro4ters    时间: 2013-4-9 15:44
站长苏飞 发表于 2013-4-9 15:42
这句听的不太明白,你是说如果是图片没有返回Byte还是我代码中有问题???

  byte[] RawResponse = _stream.ToArray();
                    //是否返回Byte类型数据
                    if (objhttpitem.ResultType == ResultType.Byte)
                    {
                        result.ResultByte = RawResponse;
                        //这是我修改过后的.之前没有直接返回.而是直接进行编码,这样就会报错.
                        return result;
                    }

作者: 站长苏飞    时间: 2013-4-9 16:01
ro4ters 发表于 2013-4-9 15:44
byte[] RawResponse = _stream.ToArray();
                    //是否返回Byte类型数据
            ...

你说的这种情况确实存在,不过我做的过程中还真没有见过,但是我相信一定会有的,因为是代码Bug
不过我这里的意思不是这样的,而是在返回Byte的同时也要返回Html,也就是说Html不管你设置的Byte还是String都会返回,我是这个意思,所以不是没有加这个,而是还要返回Html,因此必须要向下执行,那个开关说白了只是指定一下要不要取Byte而已,不过还是感谢你提出来这个问题,我升级时再把这里优化一下,如果是图片的时候或者是返回Byte时做一些判断。
谢了
作者: Eagle    时间: 2013-4-10 13:33
现在没时间看,先留个记号,回头细细品味!
作者: 梦如人生    时间: 2013-4-10 16:33
......
作者: 铄崇惕    时间: 2013-4-10 22:14
难得好贴,赞一个,继续努力啊
作者: sinoap    时间: 2013-4-19 23:48
建议支持gzip、deflate解压缩。
作者: 站长苏飞    时间: 2013-4-20 08:29
sinoap 发表于 2013-4-19 23:48
建议支持gzip、deflate解压缩。

已经支持了
作者: coody    时间: 2013-6-8 10:59
是否可以把证书文件 镶嵌到资源文件里去 调用
作者: 站长苏飞    时间: 2013-6-8 11:00
coody 发表于 2013-6-8 10:59
是否可以把证书文件 镶嵌到资源文件里去 调用

可以
作者: qq576733600    时间: 2013-6-8 13:40
有的网站做了 gzip 验证 如果没有加这个 会自动返回 503  。希望 改进下。
request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
还有可以加入 超时处理,如果网页超时 是否重新加载。重新加载次数阀值。
还可以加入自动获取抓取页的 资料并下载到本地的功能。
还可以加入 各种资源 的处理 例如 下载 图片。等
还可以加入 对网页元素的。处理。 取网页某个元素。取网页某个属性, 类似Jquery
还可以加入 ...
以上 本人都已经实现。 希望斑竹能做的更好。
作者: 站长苏飞    时间: 2013-6-8 22:23
qq576733600 发表于 2013-6-8 13:40
有的网站做了 gzip 验证 如果没有加这个 会自动返回 503  。希望 改进下。
request.Headers.Add("Accept-E ...

有的网站做了 gzip 验证 如果没有加这个 会自动返回 503  。希望 改进下。
request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
你这个在Header可以自己设置,我的HttpItem参数类里面有Header这个参数的。
希望你看看教程和我的类


还有可以加入 超时处理,如果网页超时 是否重新加载。重新加载次数阀值。
超时处理是指什么?
重试的这个我其实是打算加的,因为这个可以通过编程自己解决

还可以加入自动获取抓取页的 资料并下载到本地的功能。
这个本身就是抓取的Html或者是Byte,可以自行保存

还可以加入 各种资源 的处理 例如 下载 图片。等
这个功能本身就有,你要记得先看教程
还可以加入 对网页元素的。处理。 取网页某个元素。取网页某个属性, 类似Jquery
这个Jquery,或者是正则做的很好了,没必要有点跑题了。
类意在通用性,而不是加一些繁重的功能,
如果这些都要加的话确实很多,下载图片,识别,分析网页,等会有好多,但是这和Http请求是不是就没有任何关系了,
我的类意在做Http请求方向,而不是数据分析和处理。所以希望你能明白。
这些都是请求之前,和请求之后需要做的工作,只要不是影响请求的基本上都不能加进去的。
因为那样太多了,每个人的需要是不一样的,怎么加也加不完的。所以只要提供一个请求类就OK了,具体要怎么处理数据,怎么解析分析,要靠大家自己发挥,我尽量提供解决方案。
最后感谢你对我的类的支持。
我会一如既往的研究下去



作者: Monn    时间: 2013-6-12 23:25
要是能加入一个格式化cookie的功能就好了。。
作者: 站长苏飞    时间: 2013-6-13 08:02
Monn 发表于 2013-6-12 23:25
要是能加入一个格式化cookie的功能就好了。。

注册 看教程,已经有这样一个类了
作者: Monn    时间: 2013-6-13 10:29
站长苏飞 发表于 2013-6-13 08:02
注册 看教程,已经有这样一个类了

我知道有那个cookiehelper,我的意思是要是写入主类中,用的时候设置一下开启的开关就行了,要是这样多好啊。。嘿嘿。。
作者: 站长苏飞    时间: 2013-6-13 10:33
Monn 发表于 2013-6-13 10:29
我知道有那个cookiehelper,我的意思是要是写入主类中,用的时候设置一下开启的开关就行了,要是这样多好 ...

这个暂时还是先不加吧。毕竟这是分析Cookie,与Http请求关没有太大关系,Httphelper就是一个类,代码量有人限制,不能过于沉重,我尽量多给大家提供解决方案,如果以后技术上有突破一定加进来
作者: leenkon    时间: 2013-8-8 13:23
建议增加设置header信息
作者: 站长苏飞    时间: 2013-8-8 20:51
leenkon 发表于 2013-8-8 13:23
建议增加设置header信息

教程里不是有吗,这是最基本的,肯定有,不要叫教程都不看,

作者: 转角处遇见    时间: 2013-9-5 22:48
谢谢提供,继续努力!
作者: qq576733600    时间: 2013-9-29 16:42
调用HttpWebResponse res = (HttpWebResponse)req.GetResponse();
有的时候会假死。
需要改进一下。
网上有对应的信息。
作者: 站长苏飞    时间: 2013-9-29 16:45
qq576733600 发表于 2013-9-29 16:42
调用HttpWebResponse res = (HttpWebResponse)req.GetResponse();
有的时候会假死。
需要改进一下。

HttpWebResponse res = (HttpWebResponse)req.GetResponse();  这个会假死和Htttphelper类无关吧,是网站反映问题,到了这一步就是在等网站反映了。

网上有你发一下网址过来我看看,我个人认为不可能,这一步了都是在等网站反映了

作者: cload    时间: 2013-10-3 21:02
支持且崇拜站长。
感谢站长及各位坛友的无私奉献。
----------------------以上的确是发自肺腑的。
言归正传,类中(4.0以下):
                //request.CookieContainer = new CookieContainer();//此句多余?
                using (response = (HttpWebResponse)request.GetResponse())
上面那句好像是多余的?有了反而错误?
只是我个人测试,或有错误或不到,请谅。
作者: 站长苏飞    时间: 2013-10-6 14:29
cload 发表于 2013-10-3 21:02
支持且崇拜站长。
感谢站长及各位坛友的无私奉献。
----------------------以上的确是发自肺腑的。

不要随便下定论,这个如果不写在Cookie优集合里是不会有数据的,出错就是说明原因,或者是访问的那个网站,出的什么错,不一定是这里的问题吧,
我建议你再发个帖子说明下原因


作者: cload    时间: 2013-10-6 14:58
站长苏飞 发表于 2013-10-6 14:29
不要随便下定论,这个如果不写在Cookie优集合里是不会有数据的,出错就是说明原因,或者是访问的那个网站 ...

不再重复发帖了。
请站长移步:http://www.sufeinet.com/forum.php?mod=viewthread&tid=5544
注释掉类中的那一句后就OK了。这种情况恐怕今后还会遇到,怎么处理呢?

作者: 站长苏飞    时间: 2013-10-6 15:14
cload 发表于 2013-10-6 14:58
不再重复发帖了。
请站长移步:http://www.sufeinet.com/forum.php?mod=viewthread&tid=5544
注释掉类 ...

如果是这样 那你就先注释那一句先用着,我有时间做做测试看看是什么原因造成的。到时候我会发个帖子出来

作者: cload    时间: 2013-10-6 15:16
OK。也看了大家分享的几个源码,有部分(淘宝登录的那个)也直接把那句去掉了。
作者: 站长苏飞    时间: 2013-10-6 15:18
cload 发表于 2013-10-6 15:16
OK。也看了大家分享的几个源码,有部分(淘宝登录的那个)也直接把那句去掉了。

应该不是,原来是没有这个,这个是最近才加上的是9.29号才加上的,如果使用中有问题可以先去掉,我再做做测试,或者重新组织下参数可以配置是否使用这行,我争取在下次更新时把这问题解决了。



作者: cload    时间: 2013-10-6 15:20
OK,站长辛苦了。
作者: xlj_qq    时间: 2013-10-21 22:26
我想提个需求,对于有些会跳转的网站希望可以把跳转后的网址返回出来。我现在是想通过不设置自动跳转,然后解析。但对于一些有的跳转返回的页面不一致,无法做到全部统一。
作者: 站长苏飞    时间: 2013-10-22 08:14
xlj_qq 发表于 2013-10-21 22:26
我想提个需求,对于有些会跳转的网站希望可以把跳转后的网址返回出来。我现在是想通过不设置自动跳转,然后 ...

你说的这个情况分为两种,第一种是系统跳转就是我们常说的301 302类型的,这种一般是通过IIS等平台,实现的,这种只要设置
[code=csharp] Allowautoredirect = true,//是否根据301跳转     可选项   
[/code]
这样设置就会自动跳转了
第二种是代码跳转就是执行JS之类的。这种方式是没有办法分析的。因为不清楚他们具体是怎么跳的。这种只能自己具体问题具体分析。


作者: qq33444610    时间: 2013-11-20 21:14
很感谢提供这个类。
使用中遇到一个问题和提一个建议。
[C#] 纯文本查看 复制代码
private void SetCookie(HttpItem item)
        {
            if (!string.IsNullOrWhiteSpace(item.Cookie))
                //Cookie
                request.Headers[HttpRequestHeader.Cookie] = item.Cookie;
            //设置Cookie
            if (item.ResultCookieType == ResultCookieType.CookieCollection && item.CookieCollection != null) //&& item.CookieCollection.Count > 0)
            {
                request.CookieContainer = new CookieContainer();

                request.CookieContainer.Add(item.CookieCollection);
            }
        }

按照原来的条件,如果我们在一些场合先要GET获得cookie再POST时,往往获取不到GET返回的CookieCollection,只能返回string类型的cookie,把 item.CookieCollection.Count > 0条件去除后,就可以正常获取。
作者: 站长苏飞    时间: 2013-11-21 08:33
qq33444610 发表于 2013-11-20 21:14
很感谢提供这个类。
使用中遇到一个问题和提一个建议。
[mw_shl_code=csharp,true]private void SetCooki ...

确实有这个问题,很感觉你的反馈,我已修复这个问题,你现在可以重新下载 http://www.sufeinet.com/thread-3-1-1.html

作者: qq33444610    时间: 2013-11-21 09:09
提出一个建议,是否添加cookie自动追加功能。往往我们访问一个网站cookie都是几个网页重定向后获取全的。还有就是自动重定向问题,如果自动重定向往往cookie获取不全,建议添加通过条件判断来进行重定向,
比如header中的location不能null时进行重定向,最好添加重定向次数。不加的话有些网站会出现无限重定向的情况。
作者: 站长苏飞    时间: 2013-11-21 09:41
qq33444610 发表于 2013-11-21 09:09
提出一个建议,是否添加cookie自动追加功能。往往我们访问一个网站cookie都是几个网页重定向后获取全的。还 ...

Htttphelper暂时不会考虑走逻辑方向。感谢你的建议

作者: rockman    时间: 2013-11-21 15:45
是否不支持ResponseUri获取?有些时候需要根据返回的结果url做处理,url后面的QueryString是动态的
作者: 站长苏飞    时间: 2013-11-21 15:52
rockman 发表于 2013-11-21 15:45
是否不支持ResponseUri获取?有些时候需要根据返回的结果url做处理,url后面的QueryString是动态的

ResponseUri是个什么东西,说清楚点

作者: rockman    时间: 2013-11-21 15:54
站长苏飞 发表于 2013-11-21 15:52
ResponseUri是个什么东西,说清楚点

http://msdn.microsoft.com/zh-cn/library/system.net.httpwebresponse.responseuri(v=vs.110).aspx

作者: 站长苏飞    时间: 2013-11-21 16:08
rockman 发表于 2013-11-21 15:54
http://msdn.microsoft.com/zh-cn/library/system.net.httpwebresponse.responseuri(v=vs.110).aspx

这个和请求时的是一样的,只有在重定向时会有变化,不过暂时可以在Header里获取到。稍后更新时增加上,感谢你

作者: rockman    时间: 2013-11-21 16:10
本帖最后由 rockman 于 2013-11-21 16:11 编辑
站长苏飞 发表于 2013-11-21 16:08
这个和请求时的是一样的,只有在重定向时会有变化,不过暂时可以在Header里获取到。稍后更新时增加上,感 ...

对,重定向时的域名可能是动态的,从Location截取还是略麻烦点。
今天着手把原来自己的http类换成你的了,速度快了不少,非常感谢{:soso_e183:}

作者: 站长苏飞    时间: 2013-11-21 16:17
rockman 发表于 2013-11-21 16:10
对,重定向时的域名可能是动态的,从Location截取还是略麻烦点。
今天着手把原来自己的http类换成你的了 ...

不用截取,是在Header属性里,Header["Location"]这样就行了,
不过这里面只有一个Url。
你要吧订阅这个类,我更新时把这个带上,请关注
如果在使用中有任何问题可以发帖子,我们第一时间进行处理

作者: qq33444610    时间: 2013-11-21 22:12
站长苏飞 发表于 2013-11-21 08:33
确实有这个问题,很感觉你的反馈,我已修复这个问题,你现在可以重新下载 http://www.sufeinet.com/threa ...

这样改还是存在问题,比如我一开始就new一个CookieCollection给Item的CookieCollection。因为新new的CookieCollection的个数肯定为0.导致add不执行,仍然返回空!
作者: 站长苏飞    时间: 2013-11-22 08:02
qq33444610 发表于 2013-11-21 22:12
这样改还是存在问题,比如我一开始就new一个CookieCollection给Item的CookieCollection。因为新new的Cook ...

你理解错了吧,返不返回主要是设置这里
if (item.ResultCookieType == ResultCookieType.CookieCollection)
           {
               request.CookieContainer = new CookieContainer();
           }



下面的我会在以后的优化中逐步去掉,而不是当有数据时就添加,其实这样设计是不合理的,应该是遵循ResultCookieType类型来确定。

作者: lsdlt    时间: 2013-11-25 17:28
本帖最后由 lsdlt 于 2013-11-25 17:29 编辑

.......
              string statusCodeDescription = result.StatusDescription;
                //把得到的Byte转成图片
                Image myImage = result.Image;

                myImage.Save(file, System.Drawing.Imaging.ImageFormat.Jpeg);//提示GDI+错误,无法保存。
.....

不知是不是在这里提问。..

作者: 站长苏飞    时间: 2013-11-25 21:06
lsdlt 发表于 2013-11-25 17:28
.......
              string statusCodeDescription = result.StatusDescription;
                // ...

发个新帖子,帖下代码具体给你看看

作者: coody    时间: 2014-4-5 09:41
shi是否可以加个开关设置ie代理 和 不设置ie 代理呢
作者: 站长苏飞    时间: 2014-4-5 10:31
coody 发表于 2014-4-5 09:41
shi是否可以加个开关设置ie代理 和 不设置ie 代理呢

这个已经加过了,在下一个版本里你会看到的
作者: coody    时间: 2014-4-5 21:57
haiyou还有出现了一个这样的问题
Connection: Keep-Alive
第一次有这个头部,但第二次在fidder里看的时候就没有了
作者: coody    时间: 2014-4-5 21:59
KeepAlive = true,设置了也没有用
作者: 风向标    时间: 2014-5-16 07:25
(, 下载次数: 148)