xmlhttp组件 ajax可以访问外网吗
小偷程序实际上是通过了XML中的XMLHTTP组件调用其它网站上的网页,动态载入内存后,再对别人网页的内容进行分析过滤。所以,原则上只要别人网页上能显示出来的信息,你都可以使用(关于连接,一般的下载网站的连接你是截不到的,因为它进行了隐藏)。现在有很多新闻小偷程序,很多都是调用了sina的新闻网页,对其中的html进行了一些替换,同时对广告也进行过滤。除了新闻截取,你还可以利用小偷程序去截取一些别的信息,比如天气预报等。
小偷程序的优点有:
1、无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新;
2、可以节省服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站。
其缺点有:
1、不稳定,如果目标网站出错,程序也会出错。目标网站进行升级维护,小偷程序也要进行相应修改;
2、速度慢,因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些。
小偷程序一般是使用xmlhttp组件来下载别人的网页,将别人的网页内容载到了你的内存中,再经过分析,过滤掉不需要的内容,最终实现按照自己的格式来显示内容。比如这个网页:http://www.25175.com/,就是截取了25175的内容。
以下是小偷程序代码:
<%
'常用函数
'1、输入url目标网页地址,返回值getHTTPPage是目标网页的html代码
functiongetHTTPPage(url)
dimHttp
setHttp=server.createobject("MSXML2.XMLHTTP")
Http.open"GET",url,false
Http.send()
ifHttp.readystate<>4then
exitfunction
endif
getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
sethttp=nothing
iferr.number<>0thenerr.Clear
endfunction
%>
换句话说,要做小偷程序,你必须了解xmlhttp组件的使用。微软提供的Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。
XMLHTTP对象及其方法:
创建XMLHTTP对象的语句如下:
SetobjXML=CreateObject("Msxml2.XMLHTTP")
或
SetobjXML=CreateObject(“Microsoft.XMLHTTP”)
其中SetobjXML=CreateObject("Msxml2.XMLHTTP")是最新的版本
对象创建后调用Open方法对Request对象进行初始化,语法格式为:
poster.openhttp-method,url,async,userID,password
Open方法中包含了5个参数,前三个是必要的,后两个是可选的(在服务器需要进行身份验证时提供)。
参数的含义如下所示:
http-method:HTTP的通信方式,比如GET或是POST
url:接收XML数据的服务器的URL地址。通常在URL中要指明ASP或CGI程序
async:一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作
userID:用户ID,用于服务器身份验证
password:用户密码,用于服务器身份验证
比如,我们要调用百度的网页,我们可以:
dimHttp
setHttp=server.createobject("MSXML2.XMLHTTP")
Http.open"GET","http://www.baidu.com",false
Http.send()
Send方法是用来发送XML数据的,用法如下:
poster.send()
如果不用send来发参数,而你要调用的网页又要接收参数,可以这样简单处理
dimHttp
setHttp=server.createobject("MSXML2.XMLHTTP")
Http.open"GET","http://要调用的网页?id=1&name=abc",false
Http.send()
Http.send()以后,xmlhttp对象会返回一个对象,这个对象里面就包含了所调用网页的内容,就象从浏览器里打开一样,只不过网页内容是在内存中,还没有显示出来。但在调用过程中可能会出错,所以XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。
0Response对象已经创建,但XML文档上载过程尚未结束
1XML文档已经装载完毕
2XML文档已经装载完毕,正在处理中
3部分XML文档已经解析
4文档已经解析完毕,客户端可以接受返回消息
所以我们一般这样处理:
dimHttp
setHttp=server.createobject("MSXML2.XMLHTTP")
Http.open"GET","http://要调用的网页?id=1&name=abc",false
Http.send()
'检查是否完成,readystate值为4说明载入完毕
ifHttp.readystate<>4then
exitfunction
endif
Http.send()后,经检测Http.readystate==4,说明载入完毕,这时网页内容已经载入到了Http.responseBody中了,但是如果是中文网页,Http.responseBody中会有乱码,这需要我们转换一下乱码,所以完整的调用是这样的:
dimhttp
sethttp=Server.createobject("Microsoft.XMLHTTP")
Http.open"GET","你要调用的网址",false
Http.send()
ifHttp.readystate<>4then '如果不等于4,说明出错了
exitfunction
endif
getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
sethttp=nothing
其中,bytesToBSTR是一个自己写的函数
FunctionBytesToBstr(body,Cset)
dimobjstream
setobjstream=Server.CreateObject("adodb.stream")
objstream.Type=1
objstream.Mode=3
objstream.Open
objstream.Writebody
objstream.Position=0
objstream.Type=2
objstream.Charset=Cset
BytesToBstr=objstream.ReadText
objstream.Close
setobjstream=nothing
EndFunction
所以,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号的新闻,就这样调用:
dimhttp
sethttp=Server.createobject("Microsoft.XMLHTTP")
Http.open"GET","http://news.sina.com.cn/old1000/news1000_20050618.shtml",false
Http.send()
ifHttp.readystate<>4then
exitfunction
endif
getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
sethttp=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.25175.com,"wwwEladies")
更多阅读
可以用醋洗脸吗 用醋洗脸能去斑吗
可以用醋洗脸吗1、水温要适宜最適宜的溫度是34攝氏度左右。如果低于20攝氏度對于皮膚的滋養不利,可以引起面部血管收縮,使皮膚蒼白,枯萎多皺。如果高于38攝氏度可以引起血管和毛孔張開,使皮膚松弛無力,容易出現皺紋,久了皮肤会变得干燥
孕妇准妈妈可以吃小番茄吗?好不好? 孕妇内裤准妈妈
小番茄又叫“圣女果”“樱桃番茄”,是转基因而成的,味道鲜美,深受大家喜爱,那么孕妇可以吃小番茄吗?孕妇吃小番茄有什么注意事项?孕妇能吃小番茄吗? 对于孕妇来说,小番茄可以吃。但还是建议要注意吃的量。孕妇应营养均衡,多方面摄取营
ipad可以装微信吗 平板电脑微信抢红包吗
微信是时下最火的移动应用之一,很多朋友手机中都安装有微信,经常看到网友在问iPad能用微信吗?答案当然是肯定的。一下收集整理iPad安装微信,这个方法适用于没有越狱的iPad 2/3/4或iPad Miniipad可以装微信吗_ipad 微信
孕妇可以用精油吗?适合孕妇用的精油有哪些 孕妇可以用香薰精油吗
? ??精油疗法为当今都市女性所喜爱,但是很多精油都标有“孕妇禁用”等字样。因为纯度过高的精油都具备一定的毒性,对于胎儿有伤害的危险,所以很多孕妇产生了孕期可以用精油吗的疑问。是否所有的精油都不可用?一般来说,单方精油的纯度都很
孕妇可以喝红豆汤吗?红豆汤的做法 孕妇喝红豆汤
孕妇可以喝红豆汤吗?红豆汤的做法——简介红豆有利尿,消除水肿、强心、解毒的功效,孕妇可以喝红豆汤,对孕期水肿和维护心脏健康,排出毒素是很有好处的,孕妇可以适量喝红豆汤。孕妇可以喝红豆汤吗?红豆汤的做法——工具/原料赤小豆(红豆)