最近在做一个老师接的项目,项目名称叫做《舆情分析与影响》。简单讲就是分析网上对某事件的评论,得出正面和反面的支持率,然后用 类似发帖机的东西,进行影响。我做的部分是 舆情影响,说难听点就是 发帖机,说好听点就是高端发帖机。在这个项目里,学习到了很多的东西,想了想还是记录在这里比较好。主要要记录的是两方面:1.软件架构;2.Httpwebrequest的使用
1.先讲下Httpwebrequest的使用。
关于Httpwebrequest的使用,网上一搜就是一大堆。我这要写的主要是我自己使用的经验。
刚开始做这个东西的时候,我是这么架构的:有一个Account抽象类,来表示账号。在Account里面,有一个private属性是Httpwebrequest req。当时这么做的思路是,Account类要经常进行发帖的操作,让他的属性里面有一个Httpwebrequest会减少一些变量创建的时间。但是今天我在调试一个网站的发帖时,10条评论最后都是只有3条会正常发帖。代码如下所示:
我就一直在找原因,使用调试一步一步的走,但是都没有问题。随后我又想是不是发帖的速度太快了,就加了Thread.Sleep(),来减缓下发帖的速度。结果还是不行。。最后我就想到是不是req的问题,因为req是一个属性,上一次发帖可能会影响到下一次的发帖。然后我就直接在Post里面,使用一个全新的httpwebrequest变量,结果运行顺利,果然跟我想的一样。
2.登陆的经验
现在有的网站都是注册制度,要注册个账号才能发帖或者干别的事。使用httpwebrequest实现登陆主要靠的是CookieContainer。以下代码演示的就是如何登陆
其中最关键的就是创建一个CookieContainer实例,然后使用req.CookieContainer = container来关联起来。这样就能保存cookie的值了。
另外比较重要的一点就是:req是否可以为局部变量?
之前我一直以为如果要一直保持登陆的状态,那么req这个变量必须是Account的一个属性。。现在我才明白登陆信息的保存是放在cookiecontainer里面,所以只要cookiecontainer是类的一个属性,并且被实例化,就可以了。httpwebrequest完全可以是局部变量,而且根据我的经验,httpwebrequest最好是局部变量,如果不是局部变量,那么就会有可能影响到别的帖子的发表。。。
3.远程服务器返回错误: (500) 内部服务器错误
到目前为止,总共碰到过 404 505错误,今天又多了个 500错误。。真是痛苦啊。。。后来查了下,才发现是编码的问题。还以为是gb2312编码,居然是 UTF-8。。。。。。。。。
通过这么多远程服务器错误,总结下:
如果是这类 远程服务器返回错误:XXX.按照我的经验,一般可分为以下几大类:1.忘了加上 cookiecontainer;2.编码问题.其他的都忘了,啥时候记起来了,就再来这写下。
今天先写到这,语文不好,如果文字写的很别扭请见谅~~~