分享
 
 
 

小偷程序原理二

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

一般来说,我们做网站,数据都是在我们自己的数据库中的,但有些数据,我们不想也不能自己去收集数据,比如新闻\天气预报,(我们无法天天更新),所以我们就需要借助别人的网站来显示这些内容 。但如果直接链接到别人的网站,那就不是自己的站点了,所以我们通过xmlhttp对象来在后台把别人的网页内容载入到内存中,经过筛选,将别人的网页内容显示出来 ,这就是所谓的“小偷程序”。

小偷程序实际上是通过了XML中的XMLHTTP组件调用其它网站上的网页,动态载入内存后,再对别人网页的内容进行分析过滤。所以,原则上只要别人网页上能显示出来的信息,你都可以使用(关于连接,一般的下载网站的连接你是截不到的,因为它进行了隐藏)。现在有很多新闻小偷程序,很多都是调用了sina的新闻网页,对其中的html进行了一些替换,同时对广告也进行过滤。除了新闻截取,你还可以利用小偷程序去截取一些别的信息,比如天气预报等。

小偷程序的优点有:

1、无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新;

2、可以节省服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站。

其缺点有:

1、不稳定,如果目标网站出错,程序也会出错。目标网站进行升级维护,小偷程序也要进行相应修改;

2、速度慢,因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些。

小偷程序一般是使用xmlhttp组件来下载别人的网页,将别人的网页内容载到了你的内存中,再经过分析,过滤掉不需要的内容,最终实现按照自己的格式来显示内容。比如这个网页:http://www.itb2b.com.cn/thief/index.asp ,就是截取了新浪的内容。

以下是小偷程序代码:

<%

'常用函数

'1、输入url目标网页地址,返回值getHTTPPage是目标网页的html代码

function getHTTPPage(url)

dim Http

set Http=server.createobject("MSXML2.XMLHTTP")

Http.open "GET",url,false

Http.send()

if Http.readystate<>4 then

exit function

end if

getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")

set http=nothing

if err.number<>0 then err.Clear

end function

%>

换句话说,要做小偷程序,你必须了解xmlhttp组件的使用。微软提供的Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。

XMLHTTP对象及其方法:

创建XMLHTTP对象的语句如下:

Set objXML = CreateObject("Msxml2.XMLHTTP")

Set objXML = CreateObject(“Microsoft.XMLHTTP”)

其中Set objXML = CreateObject("Msxml2.XMLHTTP")是最新的版本

对象创建后调用Open方法对Request对象进行初始化,语法格式为:

poster.open http-method, url, async, userID, password

Open方法中包含了5个参数,前三个是必要的,后两个是可选的(在服务器需要进行身份验证时提供)。

参数的含义如下所示:

http-method: HTTP的通信方式,比如GET或是 POST

url: 接收XML数据的服务器的URL地址。通常在URL中要指明ASP或CGI程序

async: 一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作

userID:用户ID,用于服务器身份验证

password:用户密码,用于服务器身份验证

比如,我们要调用百度的网页,我们可以:

dim Http

set Http=server.createobject("MSXML2.XMLHTTP")

Http.open "GET","http://www.baidu.com",false

Http.send()

Send方法是用来发送XML数据的,用法如下:

poster.send()

如果不用send来发参数,而你要调用的网页又要接收参数,可以这样简单处理

dim Http

set Http=server.createobject("MSXML2.XMLHTTP")

Http.open "GET","http://要调用的网页?id=1&name=abc",false

Http.send()

Http.send()以后,xmlhttp对象会返回一个对象,这个对象里面就包含了所调用网页的内容,就象从浏览器里打开一样,只不过网页内容是在内存中,还没有显示出来。但在调用过程中可能会出错,所以XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。

0 Response对象已经创建,但XML文档上载过程尚未结束

1 XML文档已经装载完毕

2 XML文档已经装载完毕,正在处理中

3 部分XML文档已经解析

4 文档已经解析完毕,客户端可以接受返回消息

所以我们一般这样处理:

dim Http

set Http=server.createobject("MSXML2.XMLHTTP")

Http.open "GET","http://要调用的网页?id=1&name=abc",false

Http.send()

'检查是否完成,readystate值为4说明载入完毕

if Http.readystate<>4 then

exit function

end if

Http.send()后,经检测Http.readystate==4,说明载入完毕,这时网页内容已经载入到了Http.responseBody中了 ,但是如果是中文网页,Http.responseBody中会有乱码,这需要我们转换一下乱码 ,所以完整的调用是这样的:

dim http

set http=Server.createobject("Microsoft.XMLHTTP")

Http.open "GET","你要调用的网址",false

Http.send()

if Http.readystate<>4 then'如果不等于4,说明出错了

exit function

end if

getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")

set http=nothing

其中,bytesToBSTR是一个自己写的函数

Function BytesToBstr(body,Cset)

dim objstream

set objstream = Server.CreateObject("adodb.stream")

objstream.Type = 1

objstream.Mode =3

objstream.Open

objstream.Write body

objstream.Position = 0

objstream.Type = 2

objstream.Charset = Cset

BytesToBstr = objstream.ReadText

objstream.Close

set objstream = nothing

End Function

所以,getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")表示,将Http.responseBody的内容按GB2312编码转换一下,放到getHTTPPage变量中。

最后,你再对getHTTPPage变量进行分析,取出你想显示的数据就行了。

需要注意的是,BytesToBstr函数中用到了adodb.stream组件,这需要你的服务器有执行它的权限。

下面我们讲个实例,我们显示一下新浪的新闻。要想显示新浪的新闻,我们就要先找到新浪的新闻网址是什么。新浪有个动态新闻页网址:http://news.sina.com.cn/old1000/news1000_日期.shtml 。比如,我们要显示6月18日的新闻,就输入

http://news.sina.com.cn/old1000/news1000_20050618.shtml ,打开网页你会发现是一个新闻列表,下面我们就要分析一下它的结构,右键查看源代码。里面很乱,但你可以找到<!--新闻开始-->和<!--新闻结束-->,中间的内容就是列表的内容。好了,也就是我说,我们想显示6月18号的新闻,就这样调用:

dim http

set http=Server.createobject("Microsoft.XMLHTTP")

Http.open "GET","http://news.sina.com.cn/old1000/news1000_20050618.shtml",false

Http.send()

if Http.readystate<>4 then

exit function

end if

getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")

set http=nothing

start=Instr(wstr,"<!--新闻开始-->")

over=Instr(wstr,"<!--新闻结束-->")

wstr=mid(wstr,start+11,over-start-11)

这样wstr就是新闻列表的内容。为什么start+11和over-start-11呢?因为<!--新闻开始-->和<!--新闻结束-->都是11的长度。wstr取出来后,还要进行分析,把它的网址链接替换成你的链接,把不必要的字符过滤掉,这个工作很烦琐,你可以用replace或者用正则表达式来替换,比如:

wstr=replace(wstr,"href=""","href=""show.asp?url=")

wstr=replace(wstr,"<ul>","")

wstr=trim(replace(wstr,"</ul>","")) '完成对页面内容的截取加工

wstr=Replace(wstr,"http://news.sina.com.cn","NewsNews")

wstr=Replace(wstr,"http://tech.sina.com.cn","TechNews")

wstr=Replace(wstr,"http://sports.sina.com.cn","SportsNews")

wstr=Replace(wstr,"http://ent.sina.com.cn","EntNews")

wstr=Replace(wstr,"http://eladies.sina.com.cn","EladiesNews")

wstr=Replace(wstr,"http://jczs.sina.com.cn","jczs")

wstr=Replace(wstr,"http://auto.sina.com.cn","AutoNews")

wstr=Replace(wstr,"http://finance.sina.com.cn","FinanceNews")

wstr=Replace(wstr,"http://www.eladies.com.cn","wwwEladies")

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有